我是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
答案 0 :(得分:5)
glOrtho
用于定义正交投影体积:
签名为glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far);
左右指定x坐标剪裁平面,bottom和top指定y坐标剪裁平面,near和far指定到z坐标剪裁平面的距离。这些坐标一起提供盒形观察体积。
你定义投影体积的方式不是以3d(0,0,0)点为中心,而是(.5,-5,0)你应该用这种方式定义你的glOrtho:{{1}因为多边形位于点3d(0,0,0)的中心。 (您还可以更改多边形的坐标以匹配投影体积的中心)。
答案 1 :(得分: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 );