You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:为何这段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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 04:36:01