求助:为何这段OpenGL代码无法绘制两条直线?
代码无法绘制两条直线的原因分析
致命问题:裁剪面参数错误
glOrtho(0.0, 1000, 0.0, 1000, 0, 0);中的最后两个参数是近裁剪面(zNear)和远裁剪面(zFar),OpenGL要求zNear必须小于zFar,否则所有几何图形会被直接裁剪,无法显示。你把两者都设为0,裁剪面完全重叠,渲染管线会丢弃所有顶点。次要问题:矩阵状态未正确重置
每次调用renderScene时直接修改投影矩阵,但没有先调用glLoadIdentity()重置矩阵,多次调用后投影矩阵会叠加错误。应该在glOrtho前加上glLoadIdentity();,确保每次都是基于单位矩阵设置正交投影。冗余调用问题
如果使用双缓冲模式(通过glutInitDisplayMode(GLUT_DOUBLE)设置),glutSwapBuffers()已经会自动完成缓冲区刷新,不需要额外调用glFlush();如果是单缓冲,应该只用glFlush(),两者混用可能导致异常。
修正后的代码示例:
void renderScene(void) { glClearColor(0,0,0.5,0); glClear(GL_COLOR_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); // 重置投影矩阵 glOrtho(0.0, 1000, 0.0, 1000, -1.0, 1.0); // 修正裁剪面参数 glMatrixMode(GL_MODELVIEW); // 切换回模型视图矩阵 glLoadIdentity(); glColor3f(1,1,1); glBegin(GL_LINES); glVertex2i(10, 70); glVertex2i(900, 70); glVertex2i(500, 700); glVertex2i(500, 10); glEnd(); glutSwapBuffers(); }
内容的提问来源于stack exchange,提问作者Athanasios Margaris
相关产品推荐
相关产品推荐

