Mo卿玥on 2023-03-02 21:35 采纳率: 100%
浏览 28
已结题

OpenGL输出页面白屏没有内容

刚开始学openGL,输入测试代码之后的运行结果是白屏怎么解决?

// OpenGLDemo.cpp: 定义控制台应用程序的入口点。 //

#include <gl/glut.h> 
void renderWindow(void) {
    glClear(GL_COLOR_BUFFER_BIT); //当前背景色填充窗口 
    glColor3f(1, 0, 0); //颜色:RGB.此处R:1,为红色. 
    glBegin(GL_TRIANGLES); //开始:三角形 
    glVertex2f(-0.5f, -0.5f); //三个顶点坐标: 
    glVertex2d(0.5f, -0.5f); glVertex2d(-0.0f, 0.5f); glEnd(); //结束 
    glFlush(); //输出缓冲区 
}
int main(int argc, char* argv[]) //主函数: 参数数量&参数值
{
    glutInit(&argc, argv); //初始化glut: 接收主函数的参数 glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); //显示模式:颜色&缓冲 glutInitWindowPosition(0, 0); //窗口相对屏幕位置 
    glutInitWindowSize(720, 720); //窗口大小 
    glutCreateWindow("Hello, OpenGL!"); //创建窗口: 标题 glutDisplayFunc(&renderWindow); //显示函数
    glutMainLoop(); //循环 
    return 0;
}

img

  • 写回答

1条回答 默认 最新

  • 社区专家-Monster-XH 2023-03-02 21:42
    关注

    基于Monster 组和GPT的调写:
    可能是因为没有设置视口(Viewport)或者没有设置投影矩阵(Projection Matrix)。以下是一些常见的问题和解决方法:

    检查是否调用了glutInit()函数
    

    glutInit() 函数是初始化 GLUT 库的函数,如果没有调用这个函数,会导致无法正确初始化 OpenGL 窗口和上下文。确保你的代码中已经调用了 glutInit() 函数,例如:

    glutInit(&argc, argv);
    
    
    
    检查是否清空了颜色缓冲区
    

    在你的渲染函数中,需要先清空颜色缓冲区,否则可能会看到一个空白的窗口。使用 glClear() 函数清空颜色缓冲区,例如:

    glClear(GL_COLOR_BUFFER_BIT);
    
    
    
    检查是否设置了视口和投影矩阵
    

    在你的渲染函数中,需要设置视口和投影矩阵,否则可能会看到一个空白的窗口。设置视口和投影矩阵可以使用 glViewport() 和 glMatrixMode() 函数,例如:

    glViewport(0, 0, width, height); // 设置视口大小为 width x height
    glMatrixMode(GL_PROJECTION); // 选择投影矩阵
    glLoadIdentity(); // 重置投影矩阵
    gluPerspective(fov, aspect_ratio, near, far); // 设置投影矩阵(使用透视投影)
    
    
    

    中,width 和 height 分别表示视口的宽度和高度,fov 表示视野角度,aspect_ratio 表示宽高比,near 和 far 分别表示近裁剪面和远裁剪面的距离。

    检查是否开启了深度缓冲区
    

    在你的初始化函数中,需要开启深度缓冲区,否则可能会看到一些不正确的渲染结果。开启深度缓冲区可以使用 glEnable() 函数,例如:

    • glEnable(GL_DEPTH_TEST); // 开启深度缓冲区
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月8日
  • 已采纳回答 3月31日
  • 创建了问题 3月2日

悬赏问题

  • ¥15 docker环境配置
  • ¥20 绿盟安全扫描--检测到目标站点存在javascript框架库漏洞
  • ¥30 Android STD快速启动
  • ¥15 如何使用simulink建立一个永磁同步直线电机模型?
  • ¥30 天体光谱图的的绘制并得到星表
  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现