glOrtho不起作用

glOrtho is not working?

本文关键字:不起作用 glOrtho      更新时间:2023-10-16
 /* OpenGL animation code goes here */
        glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
        glClear (GL_COLOR_BUFFER_BIT);
        glDisable(GL_DEPTH_TEST);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(0.0f,512.0f,0.0f,512.0f,0.0f,1.0f);
        glMatrixMode(GL_MODELVIEW_MATRIX);
        glPushMatrix ();
        glLoadIdentity();
        glTranslatef(x,y,0.0f);
        //glRotatef (theta, 0.0f, 0.0f, 1.0f);
        glBegin (GL_TRIANGLES);
        glColor3f (1.0f, 0.0f, 0.0f);   glVertex2f (0.0f, 1.0f);
        glColor3f (0.0f, 1.0f, 0.0f);   glVertex2f (0.8f, -0.5f);
        glColor3f (0.0f, 0.0f, 1.0f);   glVertex2f (-0.8f, -0.5f);
        glEnd ();
        glPopMatrix ();
        SwapBuffers (hDC);
        //theta += 0.1f;
        Sleep(1);
        }

这是主要的简单opengl循环。

最近,我回来学习Opengl(离开它大约2年后)。问题是,我试图使用glOrtho来创建2D环境,但它不起作用。我的意思是,程序似乎忽略了glOrtho调用(没有错误,没有警告,没有投影,什么都没有)。这导致GL_TRIANGLE的顶点(0,1)击中窗口的顶部,任何超过1.0f的东西都会飞出视口(我认为它仍然是一个单位矩阵?)我试着改变参数,但没有改变发生在视图中。我不知道我是否错过了一些东西(可能错过了一些初始化步骤或一些我不知道的弃用)。

glOrtho(0.0f,512.0f,0.0f,512.0f,0.0f,1.0f);

这个投影有效地选择了宽度为512、高度为512、深度为1个单位的方框作为可见世界空间。然而,你指定的顶点都将在盒子的一个非常小的子集内,即在一个单元内。

glBegin (GL_TRIANGLES);
glColor3f (1.0f, 0.0f, 0.0f);   glVertex2f (0.0f, 1.0f);
glColor3f (0.0f, 1.0f, 0.0f);   glVertex2f (0.8f, -0.5f);
glColor3f (0.0f, 0.0f, 1.0f);   glVertex2f (-0.8f, -0.5f);
glEnd();

我想你只是混淆了glOrtho和glViewport的使用。