Android gluUnProject-can';无法获得正确的值

Android gluUnProject-can';无法获得正确的值,android,opengl-es,opengl-es-2.0,Android,Opengl Es,Opengl Es 2.0,我正在给GlunProject打电话(应用程序正在使用GLES20)。就我的生命而言,我无法获得我所追求的价值 我有一个对象在(-9,0,0),所以我需要gluUnProject的结果以某种方式等于这个。相机位于(0,20,4),近/远平面距离为(3100)。我甚至尝试在函数运行时打印当前矩阵(在这种情况下,屏幕上触摸的像素位置是(160345),非常接近对象的位置): 近平面: obj: (-1.3333333, -0.041666687, -1.0, 1.0) final: (-1.3333

我正在给GlunProject打电话(应用程序正在使用GLES20)。就我的生命而言,我无法获得我所追求的价值

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

近平面:

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),这对我来说没有意义。我在任何计算中都找不到这个值。我已经玩了一次又一次的数字,只是不能让它一起工作。我在这里遗漏了什么?

使用GlunProject无法做到这一点

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

由于您不知道此值,因此无法使用此函数

如果您试图实现拾取,则应手动启动光线并测试与对象的交点(或使用碰撞/物理引擎来完成此操作)。

以下是我的未投影

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

摄影机,取消投影(v)-定义光线
您可以计算到光线的距离

我可以不计算深度吗?我的近平面是3,远平面是100,我知道所有物体的确切位置,因此我可以计算从一个物体到任何其他物体的距离,以及给定距离到近/远平面的距离。你到底在找什么?如果你想知道物体到相机的距离,只要做(v1-v2).length()…我想我是在假设我可以计算物体的深度并测试它的情况下运行的,而不是必须测试许多深度来检查交叉点。所以,现在我只是打电话给unproject,询问几个不同的深度,并检查交叉点。
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;
}