0

このシンプルなシェーダーをインポートされたメッシュ (.obj メッシュ) に設定すると、ビルド時にエラーが発生する理由がわかりません。

問題は、現時点ではテクスチャを使用したくないということです。学習目的で、単純に赤いメッシュを用意して、そこから段階的に進めたいと考えていました..

ここにもいくつかのコードがあります:

ObjLoader loader = new ObjLoader();
model = loader.loadObj(Gdx.files.internal("model.obj"),true);

String vertexShader = "" +
"attribute vec4 Position;" +
"uniform mat4 u_projView;" +
"void main() {" +
"gl_Position = u_projView * Position;" +
"}";

String fragmentShader = "void main() {" +
"gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);" +
"}";

ShaderProgram shader = new ShaderProgram(vertexShader,fragmentShader);

model.render(shader);

私が得るエラー:

Exception in thread "LWJGL Application"
com.badlogic.gdx.utils.GdxRuntimeException:
java.lang.IllegalArgumentException: no uniform with name
'diffuseTexture' in shader  at
com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:113)
Caused by: java.lang.IllegalArgumentException: no uniform with name
'diffuseTexture' in shader  at
com.badlogic.gdx.graphics.glutils.ShaderProgram.fetchUniformLocation(ShaderProgram.java:283)
    at
com.badlogic.gdx.graphics.glutils.ShaderProgram.setUniformi(ShaderProgram.java:297)
    at
com.badlogic.gdx.graphics.g3d.materials.TextureAttribute.bind(TextureAttribute.java:80)
    at
com.badlogic.gdx.graphics.g3d.materials.Material.bind(Material.java:70)
    at
com.badlogic.gdx.graphics.g3d.model.still.StillModel.render(StillModel.java:57)
4

1 に答える 1

1

libGDX のソース コードを見るだけで、model.objのマテリアル セクションにテクスチャが割り当てられていると推測できます。そのため、GDX はテクスチャ属性を持つマテリアルを作成し、それを設定しようとします。

あなたがしようとするかもしれないことは次のとおりです。

  • テクスチャなしの OBJ モデルを使用する
  • テクスチャ属性を指定して Material::removeAttribute() を呼び出す
  • 「sampler2D diffuseTexture」文字列をシェーダーに追加しますが、必ず何らかの方法で使用してください。そうしないと、この属性がシェーダーから削除されます。たとえば、次のようにすることができます。

    vec4 texval = texture2d(diffuseTexture, vec2(0,0));
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0) + texval*0;
    
于 2013-03-23T13:05:53.997 に答える