Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过glUnproject从鼠标坐标到世界坐标_Python_Qt_Opengl_Opengl 3_Pyopengl - Fatal编程技术网

Python 通过glUnproject从鼠标坐标到世界坐标

Python 通过glUnproject从鼠标坐标到世界坐标,python,qt,opengl,opengl-3,pyopengl,Python,Qt,Opengl,Opengl 3,Pyopengl,我正在尝试检索我的鼠标坐标(通过Qt在QGLWidget中),以估计其在虚拟世界中的当前2D坐标(我的所有顶点的z=0) 为此,我写了以下内容: modelViewMatrix = np.asarray(matView*matModel) viewport = glGetIntegerv(GL_VIEWPORT) z = 0 x, y, z = GLU.gluUnProject(float(self.mouseX), float(self.mo

我正在尝试检索我的鼠标坐标(通过Qt在QGLWidget中),以估计其在虚拟世界中的当前2D坐标(我的所有顶点的z=0)

为此,我写了以下内容:

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矩阵是通过注视(eye、target、up)和透视(fovy、aspect、near、far)方法计算的。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坐标


所以,我猜我的代码中有错误…

我最终用以下代码解决了它:

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