#c #opengl #glsl #shader #fragment-shader
Вопрос:
Я пытаюсь рассчитать отражение/преломление, но с помощью
gl_FragColor = mix(objectColor, environmentColor, 1.0f);
Я начинаю получать ошибки в форме, из-за которых он не может найти мою форму lightPosition
. Это не имеет смысла, так как я использую эту форму для расчета рассеянного освещения и когда я удаляю функцию смешивания, чтобы gl_FragColor = objectColor;
она была в порядке. Я не уверен, что я делаю неправильно, если бы кто-нибудь мог помочь, я был бы очень признателен.
Комментарии:
1.
gl_FragColor = mix(objectColor, environmentColor, 1.0f);
равнозначноgl_FragColor = environmentColor;
. SoobjectColor
не используется и, следовательноlightPosition
, также не используется. Попробуйтеgl_FragColor = mix(objectColor, environmentColor, 0.5);
по причинам отладки.
Ответ №1:
mix(x, y, a)
может быть выражено как x*(1.0−a) y*a
.
Последним аргументом mix
является константа. Следовательно, выражение может быть оптимизировано компилятором.
gl_FragColor = mix(objectColor, environmentColor, 1.0f);
равно
gl_FragColor = environmentColor;
So objectColor
не используется и, следовательно lightPosition
, также не используется. Следовательно, униформа lightPosition
не является активным программным ресурсом.
Комментарии:
1. Дополнение: Это поведение описано здесь .