我有一个简单的顶点着色器
#version 330 core
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform mat4 modelMatrix;
in vec3 in_Position;
out vec3 pass_Color;
void main(void)
{
//gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(in_Position, 1.0);
gl_Position = vec4(in_Position, 1.0);
pass_Color = vec3(1,1,1);
}
在我的客户代码中,我有
glm::vec4 vec1(-1,-1,0,1);//first
glm::vec4 vec2(0,1,0,1);//second
glm::vec4 vec3(1,-1,0,1);//third
glm::mat4 m = projectionMatrix * viewMatrix * modelMatrix;
//translate on client side
vec1 = m * vec1;
vec2 = m * vec2;
vec3 = m * vec3;
//first vertex
vertices[0] = vec1.x;
vertices[1] = vec1.y;
vertices[2] = vec1.z;
//second
vertices[3] = vec2.x;
vertices[4] = vec2.y;
vertices[5] = vec2.z;
//third
vertices[6] = vec3.x;
vertices[7] = vec3.y;
vertices[8] = vec3.z;
现在我的问题是,如果我在着色器中没有使用矩阵乘法并且在客户端代码中没有使用,这将为我呈现一个很好的三角形,它可以拉伸整个屏幕,所以我认为顶点着色器将它的坐标映射到坐标系中的屏幕x=-1..1
上y=-1..1
如果我在着色器中进行矩阵乘法,一切都很好。但是,如果我像显示的那样在着色器中注释掉代码并在客户端上执行它,我会得到奇怪的结果。它不应该产生相同的结果吗?
我是否误以为顶点着色器的输出gl_Position
是 2D 坐标,尽管它是一个vec4
?
谢谢你的帮助。我真的很想了解顶点着色器在顶点位置方面的输出到底是什么。