как получить текущую позицию каждого объекта в сцене?

Я визуализирую несколько квадратных объектов в сфере (я в центре сферы, а объекты вокруг меня). Я использую датчик вращения телефона для просмотра объектов в сфере.

все объекты начинаются с позиции вокруг (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, и они визуализируются в сфере, подобной миру.

это работает хорошо. теперь мне нравится определять, когда объект находится прямо передо мной. получать местоположение каждого объекта в любое время, и когда я просматриваю определенный объект, делаю его доступным для выбора или освещенным.

но поскольку каждый объект умножается несколько раз, как я могу узнать его местоположение и когда я на самом деле просматриваю его сейчас?


person yanish    schedule 10.01.2016    source источник


Ответы (1)


Перевод всегда сохраняется в последнем столбце матрицы преобразования (или в последней строке, в зависимости от того, хранится ли матрица в основном столбце или строке).

Таким образом, положение объекта в мировом пространстве является последним столбцом матрицы модели.

person BDL    schedule 10.01.2016