-1

我正在打电话给 gluUnProject(应用程序正在使用 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),这对我来说真的没有意义。我在任何计算中都找不到这个值。我一遍又一遍地玩这些数字,但不能让它们一起工作。我在这里想念什么?

4

2 回答 2

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) - 定义光线 你可以计算到光线的距离

于 2012-09-03T13:22:15.503 回答
0

你不能用 gluUnProject 做到这一点。

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

因为你不知道这个值,所以你不能使用这个函数。

如果您尝试实现拾取,您应该手动启动射线并测试与您的对象的交叉点(或使用碰撞/物理引擎为您执行此操作)。

于 2012-09-03T11:59:58.537 回答