私はGL20.glUniformMatrix4fv()を呼び出すたびに、シェーダプログラムで認識されません。デバッグ後、すべてのシェーダとプログラムはエラーを返しません。GLSL 120頂点シェーダは、シェーダプログラムよりもアクティブユニフォームの表示が遅い
キューブがウィンドウに描画されます(プロジェクションがクワッドとして表示されないため)。
#version 120
attribute vec3 position;
uniform mat4 modelView;
uniform mat4 proj;
void main()
{
gl_Position = vec4(position, 1.0); // See how we directly give a vec3 to vec4's constructor
}
何もウィンドウに描画されません:エラーなしでコンパイルして、作品 シェーダプログラム。 シェーダプログラムはエラーなしでコンパイルが、何も画面上に示しています
#version 120
attribute vec3 position;
uniform mat4 modelView;
uniform mat4 proj;
void main()
{
gl_Position = proj * vec4(position, 1.0); // See how we directly give a vec3 to vec4's constructor
}
フラグメントシェーダ:
#version 120
void main()
{
gl_FragColor = vec4(0.0, 1.0, 1.0, 1.0);
}
プログラム常にリンクしてコンパイルしますが、均一なprojのdoesntの仕事。
これは、均一なデータが送信されるコードである。
GL20.glUseProgram(shaderProgram);
int model = GL20.glGetAttribLocation(shaderProgram, "modelView");//used get attrib here instead of GL20.glGetUniformLocation();
Matrix4f modelView = new Matrix4f().translate(.5f, .5f, .5f);
GL20.glUniformMatrix4fv(model, false, modelView.get(buffer));
int proj = GL20.glGetAttribLocation(shaderProgram, "proj");//and here
Matrix4f projection = new Matrix4f().
perspective((float)Math.toRadians(45), 1.0f, 0.1f, 100f).
lookAt(0.0f, 0.0f, -3.0f, //eye
0.0f, 0.0f, 0.0f, //center
0.0f, 1.0f, 0.0f);//up
GL20.glUniformMatrix4fv(proj, false, projection.get(buffer));
//draw container
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, VBO);
GL11.glDrawArrays(GL_TRIANGLES, 0, 36);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
まだ何も画面に描画されていないがgluniformmatrix4fv呼び出し前gluseprogramを置く{更新します}。アイデンティティ行列がprojに送られ、次にvec4が乗算されると、キューブは消える。
チェック:頂点シェーダで
GL20.glGetShaderiv(vertexID, GL20.GL_ACTIVE_UNIFORMS, success);
を確認しながらゼロ を返す:シェーダプログラムで
GL20.glGetProgramiv(shaderID, GL20.GL_ACTIVE_UNIFORMS, success);
がPROJとモデルビューは、mainメソッドで使用されているときに1又は2返します。
[解決済みの問題] は、get uniform locationではなくget attrib locationを使用していました。
'projection.get'とは何ですか? [lwjgl Matrix4f](http://legacy.lwjgl.org/javadoc/org/lwjgl/util/vector/Matrix4f.html)クラスではこの関数が提供されていません – BDL
LWJGLバージョン3はすべての行列計算を削除しました。私はJOML、JavaのOpenGLの数学ライブラリを使用しています。行列のgetメソッドを呼び出すたびに、その行列にあったものが返され、それをバッファに入れます。これは、その関数の大部分で必要なデータ構造です。 –
'buffer'は16-floatバッファですか?実際にMVCEを作成する必要があります。それ以外の場合は、問題がどこにあるかを推測できます。 – BDL