OpenGL ES 2.0 を使用して Android 用の単純な拡散照明シェーダーを作成しようとしており、OpenGL 4.0 シェーディング言語のクックブックから知識を得ていますが、通常の行列についてはあまり説明されていません。 「私が使ってきたのは WebGL で完全に機能しており、Java では見つからない素敵な glMatrix ライブラリを使用できます。
モデルビューマトリックスから通常のマトリックスを取得する方法がわかりませんが、モデルビューマトリックスの反転3x3ピースの転置だけを読みました.Androidマトリックスクラスでは4x4マトリックスでしか作業できません(右?)ので、分割していますおそらく私が間違っているところです。
だから私がすることは単にこれです:
float[] nMatrix = new float[4 * 4];
Matrix.invertM(nMatrix, 0, mvMatrix, 0);
Matrix.transposeM(nMatrix, 0, nMatrix, 0);
glUniformMatrix4fv(shader.getUniformPointer("nMatrix"), 1, false, nMatrix, 0);
そして、頂点シェーダーでこれを行います。
tNorm = normalize(mat3(nMatrix) * vNormal).xyz;
コードの残りの部分は基本的に本からのもので、結果は以下のとおりです
ご覧のとおり、立方体のいくつかの側面は完全に暗く、Android GL デバッガーをまったく知らないと思っても、すべての法線を取得したと確信していますが、知っている場合は、遠慮なく教えてください。
問題は、モデルビュー マトリックスから通常のマトリックスを適切に取得するにはどうすればよいかということです。