2016-03-26 34 views
0

OpenGLとQtの新機能はこれまでのところよくできています。 OpenGL 3.3でシンプルな三角形を描画することはそれほど難しくありませんでしたが、カメラを統合することは難しかったです。何らかの理由で私の三角形が消える!行列を計算するのに間違った計算をしましたか? http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/OpenGL 3.3とQt 5.6を使用したカメラの作成

https://wiki.qt.io/How_to_use_OpenGL_Core_Profile_with_Qt

私のコード(最も重要な部分のみ)::

void GLWidget::initializeGL() 
{ 
    QGLFormat glFormat = QGLWidget::format(); 
    if (!glFormat.sampleBuffers()) 
     qWarning() << "Could not enable sample buffers"; 

    // Set the clear color to black 
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f); 

    // Prepare a complete shader program… 
    if (!prepareShaderProgram("A:/Projekte/Qt Workspace/Projects/CGOpenGL/simple.vert", "A:/Projekte/Qt Workspace/Projects/CGOpenGL/simple.frag")) 
     return; 

    /////Matrix calculations///// 
    projection.perspective(45.0f, 4.0f/3.0f, 0.1f, 100.0f); 
    view.lookAt(QVector3D(4,3,3),QVector3D(0,0,0),QVector3D(0,1,0)); 
    model = QMatrix4x4(); 
    ////////// 


    // We need us some vertex data. Start simple with a triangle ;-) 
    GLfloat points[] = {-0.5f, -0.5f, 0.0f, 
         1.0f, 0.5f, -0.5f, 
         0.0f, 1.0f, 0.0f, 
         0.5f, 0.0f, 1.0f}; 
    vertexBuffer.create(); 
    vertexBuffer.setUsagePattern(QGLBuffer::StaticDraw); 
    if (!vertexBuffer.bind()) 
    { 
     qWarning() << "Could not bind vertex buffer to the context"; 
     return; 
    } 
    vertexBuffer.allocate(points, 3 * 4 * sizeof(float)); 

    // Bind the shader program so that we can associate variables from 
    // our application to the shaders 
    if (!shader.bind()) 
    { 
     qWarning() << "Could not bind shader program to context"; 
     return; 
    } 

    // Enable the "vertex" attribute to bind it to our currently bound 
    // vertex buffer. 
    shader.setAttributeBuffer("vertex", GL_FLOAT, 0, 4); 
    shader.enableAttributeArray("vertex"); 
} 

void GLWidget::paintGL() 
{ 
    // Clear the buffer with the current clearing color 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    // Set the MVP variable in the shader 
    shader.setUniformValue("MVP",projection * view * model); 

    // Draw stuff 
    glDrawArrays(GL_TRIANGLES, 0, 3); 
} 

バーテックスシェーダ:

#version 330 

layout(location = 0) in vec3 vertexPosition_modelspace; 
uniform mat4 MVP; 

void main(void) 
{ 
    gl_Position = MVP * vec4(vertexPosition_modelspace,1); 
} 

答えて

2

あなたが作った私は、出発点として、これらの2つのチュートリアルを使用しました

shader.enableAttributeArray("vertex"); 
まだそれを命名

:シェーダで

vertexPosition_modelspace 

、あなたは一貫して名前を変更する必要があります。

私の神...私はまっすぐに数学的エラーのために2時間を探していたし、それが変数名だった...私は>今ダム感じる「頂点」

+0

にシェーダーに変数の名前を変更してみます。<だから、はい、これでエラーが修正されました。私は三角形を側面から見ることができます:D –

関連する問題