2016-03-27 6 views
0

フラグメントシェーダーを使用してメッシュの色を変更する簡単なOpenGLアプリケーションを作成しています。ただし、色(sin(time))を定期的に変更するために使用される変数uniform float timeは何らかの理由で機能しません。Qt 5.5とOpenGL:明白な理由なしにプログラムが異常に動作する

さらに、メッシュ全体が白色に塗りつぶされています...編集:現在のシェーダープログラムをバインドするのを忘れてしまっただけです。何もしていない均一なフロート時間変数はまだかかわらず、固定されていません...

PaintGLコード:

void OpenGLWidget::paintGL() { 
    static unsigned int frame = 0; 

    vao->bind(); 
    shaders->link(); 
    shaders->bind(); 

    // Enabling custom shader atttributes 
    int timeIndex = shaders->uniformLocation("time"); 

    qDebug() << "Time index:" << timeIndex; 

    shaders->setUniformValue(timeIndex, time->elapsed()); 
    shaders->link(); 

    qDebug() << "Frame " << frame << "| created = " << elems->isCreated() << "| time = " << time->elapsed()/1000.f; 

    glDrawElements(GL_TRIANGLE_FAN, rawelems.size(), GL_UNSIGNED_INT, 0); 

    vao->release(); 
    ++frame; 
} 

フラグメントシェーダ:私は「頂点」を省略している

#version 330 core 

uniform float time; 
out vec3 color; 

void main() { 
    color = vec3(sin(time), 1.0f, 0.0f); 
} 

注意頂点を配置するために使用される頂点シェーダアトリビュート - インデックス0も使用しますが、これが問題であるかどうかは不明ですが、それを解決する方法であってもです。

qDebug出力(またはとにかくその一部):おそらく問題はその中にあってもよい場合、私は思っていた

TimeINDEX: 0 

Shader compilation log: "" 
Time index: 0 
Frame 0 | created = true | time = 0.268 
Time index: 0 
Frame 1 | created = true | time = 0.372 
Time index: 0 
Frame 2 | created = true | time = 0.44 
... 

私はこれをshader QOpenGLShaderProgramオブジェクトにロードされ、両方の頂点とフラグメントシェーダを有するが、ステージ私は単に推測を一般的な方向に投げるだけではなりません。私はすべてが正常に走ったリンク()関数呼び出しを削除するとちょうど

shaders->setUniformValue(timeIndex, time->elapsed()); 

shaders->link(); 

答えて

1

問題が並んでいたが判明します。

関連する問題