无法在OpenGL中渲染场景

时间:2015-10-04 08:08:25

标签: opengl

我试图通过youtube中的教程来学习OpenGL,这个教程名为使用OpenGL和Qt 进行图形编程。我完全按照本教程做了一切,但我不能渲染我的三角形。这是我的代码:

#include <GL/glew.h>
#include "GlWindow.h"

void GlWindow::initializeGL(){
    glewInit();

    GLfloat verts[] = {
        0.0f, -1.0f,
        -1.0f,-1.0f,
        1.0f, -1.0f

    };

    GLuint myBufferID;
    glGenBuffers(1, &myBufferID);
    glBindBuffer(GL_ARRAY_BUFFER, myBufferID);
    glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STATIC_DRAW);

    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0,2, GL_FLOAT, GL_FALSE, 0,0);

}

void GlWindow::paintGL(){
    glClear(GL_COLOR_BUFFER_BIT);

    glDrawArrays(GL_TRIANGLES, 0, 3);
}

这是我的GLWindow.h代码:

#ifndef GLWINDOW_H
#define GLWINDOW_H
#include <QtOpenGL/QGLWidget>

class GlWindow : public QGLWidget{
public:

protected:
    void initializeGL();
    void paintGL();
};

#endif // GLWINDOW_H

我的main.cpp

#include <QApplication>
#include <GlWindow.h>

int main(int argc, char *argv[]){
    QApplication app(argc, argv);

    GlWindow glWindow;
    glWindow.show();

    return app.exec();
}

但输出只是一个黑色的窗口。如果我也使用glClearColor(1.0f,0.0f,0.0f,1.0f); 我会有一个红色的窗口。但我不知道为什么我的三角形没有显示出来。

编辑我正在使用ubuntu 15,当我运行glx info | grep version时,我得到了这个:

server glx version string: 1.4
client glx version string: 1.4
GLX version: 1.4
OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.5.2
OpenGL core profile shading language version string: 3.30
OpenGL version string: 3.0 Mesa 10.5.2
OpenGL shading language version string: 1.30
OpenGL ES profile version string: OpenGL ES 3.0 Mesa 10.5.2
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00

1 个答案:

答案 0 :(得分:1)

问题是顶点坐标:

   GLfloat verts[] = {
        0.0f, -1.0f,
        -1.0f,-1.0f,
        1.0f, -1.0f

将它们更改为:

   GLfloat verts[] = {
        0.0f, 0.0f,
        0.0f,-1.0f,
        -1.0f, -1.0f

如果其他代码正确,您会在左下角看到一个三角形。