我目前正在学习OpenGL和从我的理解,我有画线之前调用(OpenGL的)绘制直线,但形状不
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
。然后,要绘制形状,我需要调用
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
绘制形状,如GL_TRIANGLES和GL_QUADS。 我写了这段代码,其目的是在顶部绘制一条线和3个形状,但只绘制了一条线。 这是我的代码。
void drawScene() {
//Clear information from last draw
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION); //Switch to the drawing perspective
glLoadIdentity(); //Reset the drawing perspective
glBegin(GL_LINES);
glColor3f(100,200,100);
glLineWidth(10.0f);
glVertex2f(-1.0f,0.8f);
glVertex2f(1.0f,0.8f);
glEnd();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glBegin(GL_QUADS); //Begin quadrilateral coordinates
//Trapezoid
glVertex3f(-0.7f, -1.5f, -5.0f);
glVertex3f(0.7f, -1.5f, -5.0f);
glVertex3f(0.4f, -0.5f, -5.0f);
glVertex3f(-0.4f, -0.5f, -5.0f);
glEnd(); //End quadrilateral coordinates
glBegin(GL_TRIANGLES); //Begin triangle coordinates
//Pentagon
glVertex3f(0.5f, 0.5f, -5.0f);
glVertex3f(1.5f, 0.5f, -5.0f);
glVertex3f(0.5f, 1.0f, -5.0f);
glVertex3f(0.5f, 1.0f, -5.0f);
glVertex3f(1.5f, 0.5f, -5.0f);
glVertex3f(1.5f, 1.0f, -5.0f);
glVertex3f(0.5f, 1.0f, -5.0f);
glVertex3f(1.5f, 1.0f, -5.0f);
glVertex3f(1.0f, 1.5f, -5.0f);
//Triangle
glVertex3f(-0.5f, 0.5f, -5.0f);
glVertex3f(-1.0f, 1.5f, -5.0f);
glVertex3f(-1.5f, 0.5f, -5.0f);
glEnd(); //End triangle coordinates
glutSwapBuffers(); //Send the 3D scene to the screen
}
可能有人请向我解释如何GL_PROJECTION和GL_MODELVIEW以及它们如何工作之间切换?
您使用了弃用的固定功能API。我强烈建议你转向OpenGL 4.5,这将解决问题。 – ybungalobill
为了加速学习,您应该了解有关窗口及其坐标,OpenGL视口,NDC和剪辑空间的更多信息。你不会通过编码正确学习OpenGL,并看看会发生什么。祝你好运。 – Andreas