В настоящее время я пишу свои собственные шейдеры GLSL и хочу иметь плавное затенение. Затенение работало, когда я вычислял нормали, отправляя их в VBO, но проблема здесь в том, что я реализую анимацию с костяными матрицами, нормали не являются корнями.Calculate Normals Geometry Shader
Я использую геометрический шейдер для вычисления нормалей, но я не знаю, как сгладить их.
Вот мой геометрический шейдер:
#version 150
layout(triangles) in;
layout (triangle_strip, max_vertices=3) out;
in vec2 texCoord0[3];
in vec3 worldPos0[3];
out vec2 texCoord1;
out vec3 normal1;
out vec3 worldPos1;
void main()
{
vec3 n = cross(worldPos0[1].xyz-worldPos0[0].xyz, worldPos0[2].xyz-worldPos0[0].xyz);
for(int i = 0; i < gl_in.length(); i++)
{
gl_Position = gl_in[i].gl_Position;
texCoord1 = texCoord0;
normal1 = n;
worldPos1 = worldPos0;
EmitVertex();
}
}
мне нужны лица рядом с лицом, что я вычислить нормаль для, но я не знаю, как получить их.
Вам нужно пересчитать нормали каждый кадр? – fen
Должны ли нормали быть единицей длины? т. е. * нормированный *? –
Почему вы выполняете скелетное позирование в геометрическом шейдере? Постановка обычно выполняется в вершинном шейдере. – datenwolf