我在球体中渲染了几个方形物体(我在球体的中心,物体在我周围)。我正在使用手机的旋转传感器来查看球体中的物体。
所有对象都从位置(0,0,0)开始,但在渲染时我将每个对象旋转到球体中的不同角度。
这是我处理矩阵的方式,直到我得到旋转矩阵为止:
public void position(float[] rotationMatrix , float[] projectionMatrix , float rotationAngle , float xRotation , float yRotation , float zRotation , float xTranslation , float yTranslation , float zTranslation){
float[] MVP = new float[16];
float[] modelMatrix = new float[16];
System.arraycopy(rotationMatrix, 0, modelMatrix, 0, rotationMatrix.length);
Matrix.rotateM(modelMatrix, 0, -90f, 1f, 0f, 0f); //correct the axis so that the direction of Y axis is to the sky and Z is to the front
Matrix.rotateM(modelMatrix, 0, rotationAngle, xRotation, yRotation, zRotation); //rotate the object around axis
// used to control the distance of viewing the object (currently only z translation is used)
Matrix.translateM(modelMatrix, 0, xTranslation, yTranslation, zTranslation);
Matrix.multiplyMM(MVP , 0 , projectionMatrix , 0 , modelMatrix , 0);
textureShaderProgram.setUniforms(MVP , texture);
return;
}
然后在着色器中我将每个对象位置(基本上是相同的位置)与这个MVP矩阵相乘,并且它们在像世界这样的球体中渲染。
这很好用。现在我喜欢做的是确定一个物体何时在我面前。始终获取每个对象的位置,当我查看某个对象时,使其可选择或点亮。
但由于每个对象都会成倍增加,我怎么知道它的位置以及我现在实际查看它的时间?
答案 0 :(得分:1)
转换始终存储在转换矩阵的最后一列(或最后一行,具体取决于矩阵是存储列主要还是行主要)。
因此,世界空间中对象的位置是模型矩阵的最后一列。