2012-09-20 156 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);