gpt4 book ai didi

python - 通过glUnproject从鼠标坐标到世界坐标

转载 作者:太空宇宙 更新时间:2023-11-03 17:02:36 36 4
gpt4 key购买 nike

我正在尝试检索我的鼠标坐标(通过 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 矩阵是通过 Lookat(eye, target, up) 和 Perspective(fovy,spect,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

关于python - 通过glUnproject从鼠标坐标到世界坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34905682/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com