我似乎有一个奇怪的问题。我像这样设置了OpenGL:
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width, height, 0, -width, width);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
很显然,宽度和高度是我的窗口大小,即600乘以400。在OpenGL内部一切正常,我可以在正确的坐标系中移动。例如,将绘制的内容向右平移200像素。
现在,在我的顶点着色器中,我似乎无法使用相同的坐标系,我按照惯例进行操作:
vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex;
gl_Position = pos;
在main()函数内,一切似乎都很正常。然而,当我尝试这样做时:
vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex;
pos.x+= 1.0;
pos.y-= 1.0;
gl_Position = pos;
顶点的位置不是在每个方向上移动1个像素,而是在x方向上移动300个像素,在y方向上移动200个像素。
我知道我可以在着色器中缩放这些值,但这似乎有点不太干净。我肯定在设置中做错了什么。非常感谢任何帮助。