2012-09-20 128 views
1

我是新手,很难理解glOrtho的概念。比如我有:麻烦理解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

回答

5

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

签名是glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far); 左侧和右侧指定的x坐标剪切平面,底部和顶部指定y坐标剪切平面,和近及远指定到z坐标剪切平面的距离。这些坐标一起提供了盒状的观察体积。因为你glOrtho(-.5, .5, -.5, .5, -1.0, 1.0);

您已经定义了投影的体积的方式是绕不点3D中心(0,0,0),但(0.5,-5,0),你应该已经定义了glOrtho代替这种方式多边形以点3d(0,0,0)为中心。 (您也可以更改多边形的坐标以匹配投影量的中心)。

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);