2015-10-04 4 views
0

Я пытаюсь изучить OpenGL через учебник в youtube под названием Графика Программирование с OpenGL и Qt. Я сделал все точно в соответствии с этим учебником, но я не могу отобразить свой треугольник. Вот мой код:Невозможно отобразить сцену в 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); , у меня будет красное окно. Но я не знаю, почему мой треугольник не показан.

Edit: Im используя убунту 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 orrect вы увидите треугольник в левом нижнем углу.

+0

У меня все еще есть проблема, я изменил координаты, но у меня все еще есть черное окно. – MoNo

+0

Там может быть много других проблем. В зависимости от того, какую версию OpenGL вы используете, вам нужно указать программу шейдеров и использовать массивы вершин. Кроме того, это не очень хорошая практика для использования оператора sizeof таким образом. Вместо этого, особенно при тестировании, вы должны использовать константу. 'glBufferData (GL_ARRAY_BUFFER, sizeof (verts), verts, GL_STATIC_DRAW);' Возможно, вам следует начать обучение с OpenGL версии 1.1, там вам не нужно использовать шейдерные программы. – Michael

Смежные вопросы