矢量代数在几何着色器中运行异常
Vector algebra working strangely in a geometry shader
我的比较简单的几何着色器
#version 330 core
layout (lines) in;
layout (triangle_strip, max_vertices = 3) out;
void main() {
gl_Position = gl_in[0].gl_Position;
EmitVertex();
gl_Position = gl_in[1].gl_Position;
EmitVertex();
gl_Position = 3 * (vec4 (0, 1, 0, 1) + vec4 (0, 0, 0, 1) + vec4 (1, 1, 0, 1));
EmitVertex();
EndPrimitive();
}
出于某种原因,通过向量插值而不是向量加法计算第三个顶点,乘以标量也不起作用。
不确定你在问什么,但你的数学似乎不对。注意
3 * (vec4(0, 1, 0, 1) + vec4(0, 0, 0, 1) + vec4(1, 1, 0, 1))
== 3 * (vec4(1, 2, 0, 3))
== vec4(3, 6, 0, 9)
== vec4(1/3, 2/3, 0, 1)
你可能想要这个:
vec4(3 * (vec3(0, 1, 0) + vec3(0, 0, 0) + vec3 (1, 1, 0)), 1)
== vec4(3 * vec3(1, 2, 0), 1)
== vec4(3, 6, 0, 1)
我的比较简单的几何着色器
#version 330 core
layout (lines) in;
layout (triangle_strip, max_vertices = 3) out;
void main() {
gl_Position = gl_in[0].gl_Position;
EmitVertex();
gl_Position = gl_in[1].gl_Position;
EmitVertex();
gl_Position = 3 * (vec4 (0, 1, 0, 1) + vec4 (0, 0, 0, 1) + vec4 (1, 1, 0, 1));
EmitVertex();
EndPrimitive();
}
出于某种原因,通过向量插值而不是向量加法计算第三个顶点,乘以标量也不起作用。
不确定你在问什么,但你的数学似乎不对。注意
3 * (vec4(0, 1, 0, 1) + vec4(0, 0, 0, 1) + vec4(1, 1, 0, 1))
== 3 * (vec4(1, 2, 0, 3))
== vec4(3, 6, 0, 9)
== vec4(1/3, 2/3, 0, 1)
你可能想要这个:
vec4(3 * (vec3(0, 1, 0) + vec3(0, 0, 0) + vec3 (1, 1, 0)), 1)
== vec4(3 * vec3(1, 2, 0), 1)
== vec4(3, 6, 0, 1)