0

LWJGL で機能するいくつかの簡単なチュートリアル レベルのシェーダーを取得しようとしています。シェーダー自体ですべての色を指定すると、ブロック内で単純に色を付けることができる作業セットアップがありますが、現在、浮動小数点値をシェーダーに渡して単純なグレー スケールを指定しようとしています。

Frag シェーダは次のようになります。

varying vec4 vertColor;
uniform float light;

void main()
{
    gl_FragColor = vec4(light, light, light, 1);
}

そして、ブロックをレンダリングする直前のコード:

if(useShader)
{
    int loc = ARBShaderObjects.glGetUniformLocationARB(program, "light");
    System.out.println("LOC: " + loc);
    ARBShaderObjects.glUniform1fARB(loc, 1.0f);
    ARBShaderObjects.glUseProgramObjectARB(program);
}

Frag シェーダーは元々指定されていましたが、これは機能し、を任意の float 値にgl_FragColor = vertColor置き換えることができ、機能します。しかし、私が持っているように、何を渡しても、レンダリングすると正方形は常に黒になります。これは、デフォルトが に設定されているためだと思います。これは、ユニフォーム変数が設定されていないように聞こえます。lightvec4ARBShaderObjects.glUniform1fARBuniform float light0.0f

関係があるとすれば、出力時に LOC が 0 であることは確かです。

私が欠けているものを知りたいです。

4

1 に答える 1

0

これら 2 行の順序を次のように変更してみてください。

ARBShaderObjects.glUniform1fARB(loc, 1.0f);
ARBShaderObjects.glUseProgramObjectARB(program);

に:

ARBShaderObjects.glUseProgramObjectARB(program);
ARBShaderObjects.glUniform1fARB(loc, 1.0f);

均一値をアップロードする前に、プログラムの使用を開始する必要があります。

于 2013-03-10T17:18:54.153 に答える