OpenGL黑屏?

Posted

技术标签:

【中文标题】OpenGL黑屏?【英文标题】:OpenGL blank screen? 【发布时间】:2015-10-04 17:02:09 【问题描述】:

我正在从书中学习 OpenGL,我完全按照书中的内容进行操作,但是当我运行它(Eclipse C++ IDE)时,我得到的只是空白屏幕。 书是“程序员的OpenGL指南”。我认为错误在 Reshape() 中,但代码来自书籍。

#include <iostream>
#include <GL/glew.h>
#include <GL/glut.h>

typedef const char* String;

String TITLE = "OpenGL";
int HEIGHT = 480;
int WIDTH = HEIGHT / 9 * 12;

void Update(int time)
    glutPostRedisplay();
    glutTimerFunc( 10, Update, 1);


void Init()
    glClearColor(1.0, 1.0, 1.0, 0.0);
    glShadeModel(GL_FLAT);


void Render()
    glClear(GL_COLOR_BUFFER_BIT);

    glColor3f(1.0, 1.0, 0.0);
    glLoadIdentity();
    gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
    glScalef(1.0, 2.0, 1.0); // Modeling transformation
    glutWireCube(1.0);

    glutSwapBuffers();


void Reshape(int w, int h)
    glViewport(0, 0, (GLsizei) w, (GLsizei) h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glMatrixMode(GL_MODELVIEW);


int main(int argc, char** argv)
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowSize(WIDTH, HEIGHT);
    glutCreateWindow(TITLE);

    glewExperimental = true;
    GLenum err = glewInit();
    if(err!=GLEW_OK)
        exit(1);
    

    Init();
    Update(1);
    glutDisplayFunc(Render);
    glutReshapeFunc(Reshape);

    glutMainLoop();
    return 0;

【问题讨论】:

我找不到这本书。也许你应该选择另一个,它会教你现代 OpenGL。 这是一本书ics.uci.edu/~gopi/CS211B/… 这很有趣,因为这本书是关于现代 OpenGL 的。它被称为 OpenGL 编程指南,又名“红皮书”。你能告诉我那个例子是在哪个页面上吗? 你需要一个投影矩阵。每当你设置一个视图矩阵时,就像你对gluLookAt() 所做的那样,你主要需要一个匹配的投影矩阵。否则,您渲染的几何图形将全部超出可见范围。几乎任何教程都应该向您展示如何正确设置这些转换。 【参考方案1】:

是的reshape函数肯定是错的

使用它

void Reshape(GLsizei w,GLsizei h)

    glViewport(0,0,w,h);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    if (h == 0)
        h = 1;

    GLfloat aspectRatio;
    aspectRatio = static_cast<GLfloat>(w) / static_cast<GLfloat>(h);

    gluPerspective(45.0,aspectRatio,1.0,4000.0);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

改为

【讨论】:

以上是关于OpenGL黑屏?的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL 3程序黑屏

OpenGL黑屏/没有绘制?

OpenGL VBO 程序给出黑屏

使用着色器渲染“顶点彩色”三角形时的OpenGL“黑屏”

OpenGL 与 GLUT - 黑屏

OpenGL 渲染到纹理 - 黑屏