Проблема OpenGL с вычислением отражения/преломления и формы

#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; . So objectColor не используется и, следовательно 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. Дополнение: Это поведение описано здесь .