2017-03-04 3 views
0

私はカスタムシェイダープログラムを使用するとてもシンプルなシェーダを持っています。私はカメラの変換、すべての作品ユニフォームとしての世界の変換を送信しています。私は同じように同じ色を送りますが、画面上の色には影響しないようです。 set()を使用すると、色が正しく設定されていないように黒くしか出なくなります。 libgdxシェーダからlibgdx:フラグメントシェーダに均等な色が送られない

コード:

protected final int u_projTrans = register(new Uniform("u_projTrans")); 
protected final int u_worldTrans = register(new Uniform("u_worldTrans")); 
protected final int u_color = register(new Uniform("u_color")); 

@Override 
public void begin(Camera camera, RenderContext context) { 
    program.begin(); 
    context.setDepthTest(GL20.GL_LEQUAL, 0f, 1f); 
    context.setDepthMask(true); 
    set(u_projTrans, camera.combined); 
} 

@Override 
public void render(Renderable renderable) { 
    set(u_worldTrans, renderable.worldTransform); 

    set(u_color, 1, 1, 1); // binding, but no change in color 
    // program.setUniformf("u_color", 1, 1, 1); // works 

    renderable.meshPart.render(program); 
} 

上記のコードを見ると、私は開始()関数でu_projTransを結合して、私は、レンダリング()関数でu_worldTransをバインドします。私はそれらが両方私が見るイメージに基づいて動作していることを知っています。

頂点シェーダ:

attribute vec3 a_position; 
uniform mat4 u_projTrans; 
uniform mat4 u_worldTrans; 

void main() { 
    gl_Position = u_projTrans * u_worldTrans * vec4(a_position, 1.0); 
} 

フラグメントシェーダ:

uniform vec3 u_color; 

void main() { 
    gl_FragColor = vec4(u_color, 1); // hard-coding this to a color works, so the value in u_color seems to be (0,0,0) 
} 

私は色の制服を設定しようとすると、それが正しく結合だと言うが、私はちょうどのような色の変化を得ることはありません値は(0,0,0)に設定されます。ただし、program.setUniformf()を使用してください。 set()を使用しています。他の人と同じようにバインドしていますので、mat4の代わりにvec3として送信する以外に何が違うのかわかりません。

なぜ私がset(u_color, 1, 1, 1)に渡す値がシェーダに伝わらないのか知っていますか?

答えて

1

set(u_color, 1, 1, 1);に電話するときはset(Uniform, int, int int)メソッドを使用しています。あなたが望むのはset(Uniform, float, float, float)メソッドなので、代わりにset(u_color, 1f, 1f, 1f)を使用してください。

+0

それを修正しました。私はそれをintと解釈し、1000のような高い値を試したと思ったので混乱しましたが、それはまだ黒でした。私はそれがただ静かに失敗することに気付かなかった。ありがとう! – voodoogiant

関連する問題