回転する立方体を描画し、この立方体の前の固定位置にスポットライトを追加しようとしています。しかし、z軸に間違った値を設定したため、ライトが表示されません。光の位置を変えてみたところ、ようやく立方体が思い通りに表示されました。しかし、なぜこの値が機能するのかはまだわかりません。
これが間違ったコードです。しかし、その価値は妥当だと思います。
Matrix.setIdentityM(mLightModelMatrix, 0);
Matrix.translateM(mLightModelMatrix, 0, 0.0f, 0.0f, 0.5f);
Matrix.multiplyMV(mLightPosInWorldSpace, 0, mLightModelMatrix, 0, mLightPosInModelSpace, 0);
Matrix.multiplyMV(mLightPosInEyeSpace, 0, mViewMatrix, 0, mLightPosInWorldSpace, 0);
GLES20.glUniform3f(muLightPosHandler,
mLightPosInEyeSpace[0],
mLightPosInEyeSpace[1],
mLightPosInEyeSpace[2]);
これが正しいコードです。しかし、なぜそれが機能するのかわかりません。
Matrix.setIdentityM(mLightModelMatrix, 0);
Matrix.translateM(mLightModelMatrix, 0, 0.0f, 0.0f, 2.8f);
Matrix.multiplyMV(mLightPosInWorldSpace, 0, mLightModelMatrix, 0, mLightPosInModelSpace, 0);
Matrix.multiplyMV(mLightPosInEyeSpace, 0, mViewMatrix, 0, mLightPosInWorldSpace, 0);
GLES20.glUniform3f(muLightPosHandler,
mLightPosInEyeSpace[0],
mLightPosInEyeSpace[1],
mLightPosInEyeSpace[2]);
これら2つのスニペットの違いは、ライト位置のz軸のみです。ここからすべてのソースコードを入手できます。
妥当な位置だと思う0.0f, 0.0f, 0.5f
のは、立方体の前面の中心点が0.0f, 0,0f, 0.5f
変形前にあるからです。だからそれは立方体の最強の光を与えるでしょう。