gluUnProject - 无法获得正确的值

时间:2012-09-03 07:10:46

标签: android opengl-es opengl-es-2.0

我正在调用gluUnProject(app正在使用GLES20)。对于我的生活,我无法获得我正在寻找的价值。

我在(-9,0,0)有一个对象,所以我需要gluUnProject的结果以某种方式等于这个。摄像机位于(0,20,4),近/远平面距离为(3,100)。我甚至尝试在运行函数时打印出当前矩阵(在这种情况下,屏幕上触摸的像素位置是(160,345),非常靠近对象的位置):

win: (160,345,0.0)
model: (1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0)
viewport: (0, 0, 1280, 720)
proj: (0.5625, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, -1.020202, -1.0, 0.0, 0.0, -2.020202, 0.0)

近平面:

obj: (-1.3333333, -0.041666687, -1.0, 1.0)
final: (-1.3333333, -0.041666687, -1.0)

远飞:

obj: (-1.3333333, -0.041666687, -1.0, 0.00999999)
final: (-133.33345, -4.1666727, -100.0001)

我应该在这里使用为Z值计算的东西吗?如果我提供一个大约0.864的值,我得到大约正确的X值(-9),这对我来说真的没有意义。我在任何计算中都找不到这个值。我一遍又一遍地玩这些数字,但是不能让它们一起工作。我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

你不能用gluUnProject做到这一点。

第3个参数是屏幕空间中所需点的深度(即0到1之间,0映射到近平面,1映射到远平面)

由于您不知道此值,因此无法使用此功能。

如果您正在尝试实施拣选,则应手动启动光线并测试与对象的交叉点(或使用碰撞/物理引擎为您执行此操作)。

答案 1 :(得分:0)

这是我的非项目

glm::vec3 World::Unproject(glm::vec3 v){
  glm::mat4 pv = ProjectionMatrix * ViewMatrix;
  glm::mat4 inv = glm::inverse(pv);
  glm::vec4 v4(v, 1.f);
  glm::vec4 r4 = inv * v4;
  glm::vec3 r(r4.x / r4.w, r4.y / r4.w, r4.z / r4.w);
  return r;
}

v(x,y,1.0)

-1.0 < x,y < 1.0

Camera,Unproject(v) - 定义光线 您可以计算到射线的距离

相关问题