2015-10-04 87 views
0

我想通過一個叫做的圖形學習OpenGL和Qt的教程學習OpenGL。我完全按照本教程所做的一切,但我不能渲染我的三角形。這裏是我的代碼:無法在OpenGL中渲染場景

#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 
+0

我們在說OpenGL> = 2嗎?你的着色器程序在哪裏? – peppe

+0

@peppe我認爲我的OpenGL版本是OpenGL版本字符串:3.0。我遵循的教程不使用任何着色器。 – MoNo

+0

Qt已經處理OpenGL函數加載。而QGLWidget已棄用。改用QOpenGLWidget。 – Poriferous

回答

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 

如果另一個代碼是c或者你會在左下角看到一個三角形。

+0

我仍然有問題,我改變了座標,但我仍然有一個黑色的窗口 – MoNo

+0

可能有很多其他問題。根據您使用的OpenGL版本,您必須指定着色器程序並使用頂點數組。此外,以這種方式使用sizeof運算符並不是一個好習慣。相反,特別是在測試中,您應該使用常量。 'glBufferData(GL_ARRAY_BUFFER,sizeof(verts),verts,GL_STATIC_DRAW);''也許你應該開始學習OpenGL 1.1版本,你不必使用着色器程序。 – Michael