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

how to get current position of every object in scene?

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

所有对象都从 (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 矩阵相乘,然后将它们渲染在一个像世界一样的球体中。

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

但是由于每个对象都被多次放大,我怎么知道它的位置以及我现在实际查看它的时间?

翻译总是存储在转换矩阵的最后一列中(或最后一行,具体取决于矩阵是存储在列优先级还是行优先级)。

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