OpenGL z 值。为什么前面是负值?
OpenGL z value. Why negative value in front?
Opengl 有右手坐标系。这意味着 z 值向我增加。
右手坐标系
我画了两个三角形:
float vertices[] =
{
//position //color
//triangle 1
0.0f, 1.0f, -1.0f, 1.0f, 0.0f, 0.0f,//0
-1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f,//1
1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f,//2
//triangle 2
0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f,//3
1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f,//4
-1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f//5
};
为什么三角形1在前面?三角形 2 应该在前面,因为 0.0f > -1.0f.
我在顶点着色器中只有gl_Position = vec4(aPos, 1.0);
。
之后,如果我在顶点着色器中将顶点转换为 z=-3,则此转换会正常运行。对象变得更远。
Why triangle 1 is in front? Triangle 2 should be in front, because of 0.0f > -1.0f.
I have only gl_Position = vec4(aPos, 1.0);
in vertex shader.
当然红色三角形在蓝色三角形前面,因为你没有使用任何投影矩阵。在将顶点坐标分配给 gl_Position
.
之前,您忘记了通过投影矩阵变换输入顶点
这导致顶点等于标准化设备 space 坐标。在标准化设备 space 中,z 轴指向视口并且 "projection" 是正交的而不是透视图。
你必须这样做:
in vec3 aPos;
mat4 modelProjectionMatrix;
void main()
{
gl_Position = modelProjectionMatrix * vec4(aPos, 1.0);
}
Opengl 有右手坐标系。这意味着 z 值向我增加。
右手坐标系
我画了两个三角形:
float vertices[] =
{
//position //color
//triangle 1
0.0f, 1.0f, -1.0f, 1.0f, 0.0f, 0.0f,//0
-1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f,//1
1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f,//2
//triangle 2
0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f,//3
1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f,//4
-1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f//5
};
为什么三角形1在前面?三角形 2 应该在前面,因为 0.0f > -1.0f.
我在顶点着色器中只有gl_Position = vec4(aPos, 1.0);
。
之后,如果我在顶点着色器中将顶点转换为 z=-3,则此转换会正常运行。对象变得更远。
Why triangle 1 is in front? Triangle 2 should be in front, because of 0.0f > -1.0f.
I have onlygl_Position = vec4(aPos, 1.0);
in vertex shader.
当然红色三角形在蓝色三角形前面,因为你没有使用任何投影矩阵。在将顶点坐标分配给 gl_Position
.
这导致顶点等于标准化设备 space 坐标。在标准化设备 space 中,z 轴指向视口并且 "projection" 是正交的而不是透视图。
你必须这样做:
in vec3 aPos;
mat4 modelProjectionMatrix;
void main()
{
gl_Position = modelProjectionMatrix * vec4(aPos, 1.0);
}