1

我是 openGL 的新手,我无法理解 glOrtho 的概念。例如我有:

void display(void)
{
/* clear all pixels  */
glClear (GL_COLOR_BUFFER_BIT);
/* draw black polygon (rectangle) with corners at * (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0)
*/
glColor3f (0.0, 0.0, 0.0);
glBegin(GL_POLYGON);
  glVertex3f (-.25,0,0.0);
  glVertex3f (.25, 0, 0.0);
  glVertex3f (.25, .25, 0.0);
  glVertex3f (-.25, .25, 0.0);
glEnd();
/* don’t wait!
* start processing buffered OpenGL routines */
glFlush (); }

这会产生一个矩形,然后这个“变形”矩形:

void init (void)
/* this function sets the initial state */ {
/* select clearing (background) color to white */
glClearColor (1.0, 1.0, 1.0, 0.0);
/* initialize viewing values */ 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity();
glOrtho(0, 1, 1, 0.0, -1.0,1.0);
}

这几乎使它成为一个正方形并放在左上角。我不确定它是如何做到的。矩形中的点是否已转换?

编辑:想通了。这很有帮助。http://elvenware.sourceforge.net/OpenGLNotes.html#Ortho

4

2 回答 2

5

glOrtho用于定义正交投影体积:

签名是glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far); left和right指定x坐标剪裁平面,bottom和top指定y坐标剪裁平面,near和far指定到z坐标剪裁平面的距离。这些坐标一起提供了一个盒子形状的查看体积。

您定义投影体积的方式不是以点 3d (0, 0, 0) 为中心,而是 (.5, -5, 0) 您应该以这种方式定义 glOrtho:glOrtho(-.5, .5, -.5, .5, -1.0, 1.0);因为您的多边形围绕点 3d (0, 0, 0)。(您还可以更改多边形的坐标以匹配投影体积的中心)。

于 2012-09-20T23:24:18.450 回答
2

您的glOrtho调用将视口设置为左上角为 (0,0),右下角为 (1,1),有效 Z 范围为 (-1,1)。

现在,您绘制了一个左上角为 (-0.25,-0.25) 到 (0.25,0.25) 的正方形。

这些glVertex调用与它们上方的评论不匹配。将顶点更改为您声明的值,或更改glOrtho调用:

glOrtho(-0.5, 0.5, 0.5, -0.5, -1.0, 1.0 );
于 2012-09-20T23:26:54.670 回答