Я работаю с ОЧЕНЬ простой программой, которая передает массив точек в программируемую линию для рисования куба. Я пытаюсь настроить его, чтобы изменить геометрию каждого кадра (на основе некоторого внешнего ввода) и, как таковой, для освещения, мне нужно пересчитать нормали лица после их изменения. Я делаю это в геометрическом шейдере как упражнение.Значение геометрии GLSL меняется, когда оно не должно
Мои шейдеры являются следующие:
Vertex:
#version 330 core
layout(location = 0) in vec3 vertexPosition_modelspace;
uniform mat4 MVP;
void main(){
gl_Position = MVP * vec4(vertexPosition_modelspace,1);
}
Геометрия:
#version 330
precision highp float;
layout (triangles) in;
layout (triangle_strip) out;
layout (max_vertices = 3) out;
out vec3 normal;
void main(void)
{
for (int i = 0; i < gl_in.length(); i++) {
gl_Position = gl_in[i].gl_Position;
EmitVertex();
}
EndPrimitive();
normal = vec3(0,0,1);
}
Фрагмент:
#version 330
in vec3 normal;
out vec4 color;
void main()
{
color = vec4(normal,1);
}
Я пытался вычислить нормаль (но У меня пульс вывел этот код для отладки причин), и нормальное значение было freaking, когда я запускал программу. Таким образом, я устанавливаю цвет фрагмента как обычное значение. (Чтобы убедиться, что это действительно нормально.) Итак, по какой-то причине значение «нормальное» переливается между красным, зеленым, белым и черным без объяснения причин. Если я просто указываю вектор цвета в шейдере фрагмента, то куб отображает весь этот цвет.
Почему значение нормального изменения вообще?
Мысли?
Благодарим вас за ответ. Это устранило мою проблему. Во всем моем чтении о геометрических шейдерах я никогда не видел ничего такого, что рассказывало мне об этом. Хотя это моя собственная некомпетентность. Благодарю. – APalmer