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。 -1.0F。
我在顶点着色器中只有gl_Position = vec4(aPos, 1.0);
。
之后,如果我在顶点着色器中将顶点转换为z = -3,则此平移的行为应该如此。对象变得更进一步。
答案 0 :(得分:1)
为什么三角形1在前面?三角形2应该在前面,因为0.0f> 1。 -1.0F。
我在顶点着色器中只有gl_Position = vec4(aPos, 1.0);
。
当然红色三角形位于蓝色三角形的前面,因为您不使用任何投影矩阵。在将顶点坐标指定给gl_Position
之前,您忘记使用投影矩阵变换输入顶点。
这导致顶点等于标准化的设备空间坐标。在规范化的设备空间中,z轴指向视口,“投影”是正交而非透视。
你必须做这样的事情:
in vec3 aPos;
mat4 modelProjectionMatrix;
void main()
{
gl_Position = modelProjectionMatrix * vec4(aPos, 1.0);
}