私はカスタムシェイダープログラムを使用するとてもシンプルなシェーダを持っています。私はカメラの変換、すべての作品ユニフォームとしての世界の変換を送信しています。私は同じように同じ色を送りますが、画面上の色には影響しないようです。 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)
に渡す値がシェーダに伝わらないのか知っていますか?
それを修正しました。私はそれをintと解釈し、1000のような高い値を試したと思ったので混乱しましたが、それはまだ黒でした。私はそれがただ静かに失敗することに気付かなかった。ありがとう! – voodoogiant