我正在阅读the documentation for glOrtho而不理解它。
我正在看这个调整大小代码的2D绘图,而不是为什么有些索引是积极的而且有些是负面的。绘图应该保持平坦,所以我不知道它是否做了应该做的事情:
void reshape(int width, int height)
{
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1, 1, -1, 1, -1, 1);
//left, right, bottom, top, nearval, farval
glMatrixMode(GL_MODELVIEW);
}
答案 0 :(得分:4)
它正在构建投影矩阵。 glOrtho
将当前矩阵(由前一个陈述产生的单位矩阵)与函数指定的正交投影矩阵相乘。
具体来说,对glOrtho
的这个调用正在构建一个矩阵,它将(-1,-1,-1)的世界坐标放在屏幕的左下方,而世界是屏幕右上角的(1,1,1)的纵坐标。所以如果你画三角形:
glBegin(GL_TRIANGLES);
glVertex3f(-1, -1, 0);
glVertex3f(-1, 1, 0);
glVertex3f(1, -1, 0);
glEnd();
它将覆盖整个屏幕的一半。
请注意,如果您只使用2D,那么最后两个参数并不重要(尽管它们可用于控制图层)。只需使用 z = 0 绘制所有内容,如果您需要在其他内容之前添加内容,请使用更高的 z 值。
答案 1 :(得分:2)
除了翻转z坐标外,它实际上什么都不做。如果你插入你的值,你会看到它生成矩阵
1 0 0 0
0 1 0 0
0 0 -1 0
0 0 0 1
请注意,它的不是身份矩阵,因为glOrtho
是怪异的愚蠢(注意减号):
(left, bottom, -nearVal)
和(right, top, -nearVal)
指定近剪裁平面上分别映射到窗口左下角和右上角的点,假设眼睛位于(0,0) ,0)。-farVal
指定远剪裁平面的位置。
这些减号表示fNear
和fFar
具有相反的含义。