glOrtho(-1,1,-1,1,-1,1)完成了什么?

时间:2010-10-31 13:49:06

标签: c opengl

我正在阅读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);

}

2 个答案:

答案 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指定远剪裁平面的位置。

这些减号表示fNearfFar具有相反的含义。