Использование gluUnProject - PullRequest
       1

Использование gluUnProject

2 голосов
/ 18 февраля 2012

Я использую gluUnProject, покрывающий координаты экрана для мировых координат, но, к сожалению, я получаю небольшое значение в качестве возврата Он преобразует (0,0) в (-0.80,0.40), но он должен конвертировать в (4,2) ... Код:

((GL11) gl).glGetIntegerv(GL11.GL_VIEWPORT, viewport, 0);  
         ((GL11) gl).glGetFloatv(GL11.GL_MODELVIEW_MATRIX, modelViewMatrix, 0);  
         ((GL11) gl).glGetFloatv(GL11.GL_PROJECTION_MATRIX, projectionMatrix, 0); 

         GLU.gluUnProject(main.x, main.y, 1, modelViewMatrix, 0, projectionMatrix, 0, viewport, 0, pointInPlane, 0);

        xWcoord = pointInPlane[0];
        yWcoord = pointInPlane[1];
        zWcoord = pointInPlane[2];

main.x и main.y - это координаты экрана. И это определение других переменных:

public static int[] viewport = new int[16];  
     public static float[] modelViewMatrix = new float[16];  
     public static float[] projectionMatrix = new float[16];  
     public static float[] pointInPlane = new float[16];  

1 Ответ

3 голосов
/ 21 февраля 2012

gluUnProject требует глубины z точки, которую вы хотите удалить из оконных координат и мировых координат.В вашем коде вы используете '1' для глубины точки, поэтому он дает вам вектор результата, который имеет длину приблизительно 1.

Чтобы получить глубину определенного пикселядля непроектирования вы обычно делаете что-то вроде этого:

float z;
glReadPixels( main.x, main.y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &z );

Если затем передать значение 'z' в gluUnProject вместо '1', это даст вам правильную позицию в мире.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...