2016-01-20 9 views
1

Я пытаюсь получить координаты мыши (в QGLWidget через Qt), чтобы оценить его текущие 2D-координаты в виртуальном мире (все мои вершины имеют z = 0).От координат мыши до координат мира через glUnproject

Для этого я написал:

modelViewMatrix = np.asarray(matView*matModel) 
     viewport = glGetIntegerv(GL_VIEWPORT) 

     z = 0 

     x, y, z = GLU.gluUnProject(float(self.mouseX), float(self.mouseY), float(z), model = modelViewMatrix, 
          proj = np.asarray(matProj), view = viewport) 

matModel всегда единичная матрица (numpy.eye (4)) а матрицы matView и matProj вычисляются благодаря LookAt (глаз, цель , вверх) и перспективы (фокусные, аспектные, ближние, далекие) методы. Матрица matView является единственной, которая меняет события мыши в моем приложении.

Я также обеспечить мою вершинный шейдер:

VERTEX_SHADER = """ 
#version 440 core 

uniform float scale; 
uniform mat4 Model; 
uniform mat4 View; 
uniform mat4 Projection; 

in vec2 position; 
in vec4 color;  

out vec4 v_color; 


void main() 
{ 
    gl_Position = Projection*View*Model*vec4(scale*position, 0.0, 1.0); 
    v_color = color; 

} 
""" 

Чтобы проверить мой фрагмент кода, я нарисовать квадрат с вершинами (-1, -1), (-1,1), (1, -1) и (1,1). Но когда я перемещаю мышь в угол, я не получаю никаких + -1 координат.

Так что, я думаю, есть что-то не так в моем коде ...

ответ

1

я, наконец, решил его с помощью этого кода:

depth = glReadPixels(self.mouseX, self.height()-self.mouseY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT) 
z = 2*depth -1 

mouseWorld = (self.viewport*self.matProj*self.matView*self.matModel).I*np.matrix([[self.mouseX, self.mouseY, z, 1]]).T