フラグメントシェーダーを使用してメッシュの色を変更する簡単な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();
: