如何获取场景中每个对象的当前位置?

时间:2016-01-10 11:24:11

标签: android opengl-es opengl-es-2.0

我在球体中渲染了几个方形物体(我在球体的中心,物体在我周围)。我正在使用手机的旋转传感器来查看球体中的物体。

所有对象都从位置(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矩阵相乘,并且它们在像世界这样的球体中渲染。

这很好用。现在我喜欢做的是确定一个物体何时在我面前。始终获取每个对象的位置,当我查看某个对象时,使其可选择或点亮。

但由于每个对象都会成倍增加,我怎么知道它的位置以及我现在实际查看它的时间?

1 个答案:

答案 0 :(得分:1)

转换始终存储在转换矩阵的最后一列(或最后一行,具体取决于矩阵是存储列主要还是行主要)。

因此,世界空间中对象的位置是模型矩阵的最后一列。