私の3Dエンジンのプログラミングに悩まされています。私は多くのシェーダーが働いていて、ちょうど新しいシェーダーを作りました。しかし何らかの理由で、私の統一変数は奇妙な行動を示しています。GLSLのユニフォームが消える
ユニフォームを使用しないと、その変数の位置は-1に設定されます。しかし私は私の制服が使用されていることを知っています。これが私の気持ちです。 (すなわち、シェーダは意味をなさないが、それはまだ動作しなければならない)
頂点シェーダ:
#version 150
in vec3 position;
in vec2 texCoords;
out mat4 hilf;
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform float radius;
void main(void){
hilf = projectionMatrix;
gl_Position = projectionMatrix * vec4(position,1.0);
}
は「半径」の位置は次のように設定され-1(それが使用されていないため)。 viewmatrixと同じです。しかし私の "projectionMatrix"の位置も-1に設定されています!それは私には意味がありません。今、おかしな部分が来る。私が行:gl_Position = projectionMatrix * vec4(position,1.0);
を削除すると、投影行列の位置は-1より大きくなります。
私のJavaの呼び出しは次のようになります。
location_projectionMatrix = super.getUniformLocation("projectionMatrix");
location_viewMatrix = super.getUniformLocation("viewMatrix");
location_radius = super.getUniformLocation("radius");
//-----------------
protected int getUniformLocation(String uniformName){
return GL20.glGetUniformLocation(programID, uniformName);
}
これはバグですか?私は何かが欠けていたか?ここで何が起こっているのですか?
あなたのOpenGLコードも表示してください。 – eldo
あなたのセット/所在地コードを取得しないと、これはちょうど推測に過ぎません。あなたは何か(たとえば同じ場所)を2回設定しようとしています。 – Ripi2