4

自 2 周以来,我就开始使用适用于 Android 的 OpenGl es,在尝试了 3D 示例之后,我对对象检测感到困惑。基本上屏幕的 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);

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

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

4

1 回答 1

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。这为您提供了在近平面和远平面上的鼠标位置。减去它们以获得视图方向,使用第一个作为原点,你就得到了一个很好的光线追踪任务(对象选择)。

于 2012-01-23T17:05:11.060 回答