C 费解格洛托

C 费解格洛托,c,opengl,graphics,2d,C,Opengl,Graphics,2d,我是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_POL

我是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);
}
这几乎是一个正方形,放在左上角。我不知道它是怎么做到的。点是否在矩形中变换

编辑:
我明白了。这很有帮助

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

签名为
glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far)
“左”和“右”指定x坐标剪裁平面,“下”和“上”指定y坐标剪裁平面,“近”和“远”指定到z坐标剪裁平面的距离。这些坐标一起提供了一个长方体的观察体积


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

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

签名为
glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far)
“左”和“右”指定x坐标剪裁平面,“下”和“上”指定y坐标剪裁平面,“近”和“远”指定到z坐标剪裁平面的距离。这些坐标一起提供了一个长方体的观察体积


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

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

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

glVertex
调用与它们上面的注释不匹配。将顶点更改为您指定的值,或将
glorto
调用更改为:

glOrtho(-0.5, 0.5, 0.5, -0.5, -1.0, 1.0 );

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

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

glVertex
调用与它们上面的注释不匹配。将顶点更改为您指定的值,或将
glorto
调用更改为:

glOrtho(-0.5, 0.5, 0.5, -0.5, -1.0, 1.0 );