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

时间:2011-03-30 12:44:33

标签: android events opengl-es touch object-detection

我从2周开始使用OpenGl es for Android,在尝试了3D示例后,我遇到了obect检测。 基本上将屏幕的x,y坐标映射到3d空间的x,y,z,反之亦然。

我遇到了:

GLU.gluProject(objX,objY,objZ,model,modelOffset,project,projectOffset,view,viewOffset,win,winOffset);

GLU.gluUnProject(winX,winY,winZ,model,modelOffset,project,projectOffset,view,viewOffset,obj,objOffset);

但我不明白我如何正确使用

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

1 个答案:

答案 0 :(得分:2)

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

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] + ")");

如果你想选择对象,你可以调用gluUnProject()两次,一次是z = -1,一次是z = 1.这就是你在近和远的平面上的鼠标位置。减去它们以获得视图方向,使用第一个作为原点,并且您已经获得了很好的光线跟踪任务(对象选择)。