3

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 デバッガーをまったく知らないと思っても、すべての法線を取得したと確信していますが、知っている場合は、遠慮なく教えてください。

問題は、モデルビュー マトリックスから通常のマトリックスを適切に取得するにはどうすればよいかということです。

4

2 に答える 2

4

これを支援する Java の Matrix ライブラリがどこにあるかわかりません。

ただし、modelView マトリックスに不均一なスケールが含まれていない限り、normalMatrix の代わりに modelView マトリックスを安全に使用できます。

これは、開始するのに役立ち、問題が他の場所に隠れていないことを確認するのに役立ちます.

于 2012-06-09T15:26:17.960 に答える