/* 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的任何东西都会从视口飞出(我认为这仍然是一个单位矩阵吗?)。我尝试更改参数,但在vieewport中未发生任何更改。我不知道我是否缺少某些内容(可能缺少一些初始化步骤或某些我不知道的弃用)。
最佳答案
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混淆了。
关于c++ - glOrtho无法正常工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7686167/