我正在尝试绘制一个旋转立方体并在该立方体前面的固定位置添加一个聚光灯。但是因为我在 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]);
这两个片段之间的区别仅在于光位置的 z 轴。您可以从这里获取所有源代码。
我认为0.0f, 0.0f, 0.5f
位置合理的原因是立方体正面的中心点0.0f, 0,0f, 0.5f
在变换之前。所以它会给立方最强的光。