如何在opengl Android中进行对象检测?

如何在opengl Android中进行对象检测?,android,events,opengl-es,touch,object-detection,Android,Events,Opengl Es,Touch,Object Detection,我从两周前开始使用OpenGl es for Android,在尝试了3D示例后,我对obect detection感到非常惊讶。 基本上是屏幕的x,y坐标到3d空间的x,y,z坐标之间的映射,反之亦然 我发现: GLU.gluProject(objX、objY、objZ、model、modelcoffset、project、projectOffset、view、viewcoffset、win、winOffset) GLU.glunproject(winX、winY、winZ、model、mod

我从两周前开始使用OpenGl es for Android,在尝试了3D示例后,我对obect detection感到非常惊讶。 基本上是屏幕的x,y坐标到3d空间的x,y,z坐标之间的映射,反之亦然

我发现:

GLU.gluProject(objX、objY、objZ、model、modelcoffset、project、projectOffset、view、viewcoffset、win、winOffset)

GLU.glunproject(winX、winY、winZ、model、modelcoffset、project、projectOffset、view、viewcoffset、obj、objOffset)

但是我不明白我该如何准确地使用它们


如果您能用合适的例子详细说明,请提前感谢。:)

如果你准备好了矩阵,你可以这样做:

float[] modelView = float[16];
float[] projection = float[16];
float[] view = {0, 0, 640, 480}; // viewport
float x = mouseX, y = mouseY, z = -1; 
// those are the inputs

float[] pos = new float[4]; 

GLU.gluUnProject(x, y, z, 
                modelView, 0, 
                projection, 0, 
                world.view().get_size(), 0, 
                pos, 0);

System.out.println("position of mouse in 3D is (" + pos[0] + ", " + pos[1] + ", " + pos[2] + ")");

如果要选择对象,可以调用glunProject()两次,一次调用z=-1,一次调用z=1。这将在近平面和远平面上提供鼠标位置。减去它们得到一个视图方向,使用第一个作为原点,您就有了一个不错的光线跟踪任务(对象选择).

这是一个古老的答案,但如果您能在opengl es 2中告诉我,当我们应用了投影和其他旋转/平移变换时,如何获得当前的模型视图矩阵?@AbhishekBansal据我所知,在es 2中,由于矩阵堆栈已被弃用,因此无法从opengl中获取矩阵(因此不再存在任何“当前”矩阵)。但是,作为程序员,您需要将这些矩阵作为统一的矩阵指定给着色器-因此您首先已经有了这些矩阵。如果您的问题是如何将MVP分解为modelview和projection,答案是“您没有”。只需在一个矩阵(modelview)中应用所有线性变换,在另一个矩阵(projectio)中应用投影变换。MVP是它们的乘积。