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

GLUT程序启动后始终显示空白窗口,求助问题原因

问题原因分析及修复方案

你的窗口始终空白的核心原因是循环变量未初始化,导致绘制逻辑完全没执行:

  • 外层循环的float xpos没有赋值初始值,C语言中局部变量默认会保留内存中的随机垃圾值,大概率大于等于1.0f,直接跳过整个外层循环,没有绘制任何多边形。
  • 内层循环的float ypos同样未初始化,哪怕外层循环意外执行,内层也会因为相同原因跳过。

另外还有一个冗余操作:glutSwapBuffers()之后调用glFlush()完全没必要,双缓冲模式下glutSwapBuffers()已经完成了缓冲区交换的核心操作,额外调用glFlush()不会产生任何作用。

修复后的代码

void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    
    frame++;
    
    glColor3f(1.0f, 0.0f, 0.0f);
    
    // 为循环变量初始化起始值0.0f
    for (float xpos = 0.0f; xpos < 1.0f; xpos = xpos + 0.1f) {
        for (float ypos = 0.0f; ypos < 1.0f; ypos = ypos + 0.1f) {
            glBegin(GL_POLYGON);
                glVertex2f(xpos-0.075f,ypos-0.075f);
                glVertex2f(xpos,ypos-0.075f);
                glVertex2f(xpos,ypos);
                glVertex2f(xpos-0.075f,ypos);
            glEnd();
        }
    }
    
    glutSwapBuffers(); // 双缓冲模式下完成缓冲区交换
}

额外提示

  • 务必养成局部变量初始化的习惯,C语言不会自动将局部变量置0,未初始化的变量会引发各类隐性问题。
  • 单缓冲模式下才需要使用glFlush()刷新绘制指令,双缓冲场景下只用glutSwapBuffers()即可。

内容的提问来源于stack exchange,提问作者Viraxor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:10:36