4

私は 2 週間から Android 用の OpenGl を使い始めました。3D の例を試した後、オブジェクト検出に行き詰まりました。基本的に、画面の x、y 座標を 3D 空間の x、y、z に、またはその逆にマッピングします。

私は遭遇しました :

GLU.gluProject(objX、objY、objZ、モデル、modelOffset、プロジェクト、projectOffset、view、viewOffset、win、winOffset);

GLU.gluUnProject(winX、winY、winZ、モデル、modelOffset、プロジェクト、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() を 2 回呼び出します。1 回は z = -1 で、もう 1 回は z = 1 です。これにより、近平面と遠平面でのマウスの位置が得られます。それらを差し引いてビュー方向を取得し、最初の方向を原点として使用すると、素敵なレイトレーシング タスク (オブジェクトの選択) が得られます。

于 2012-01-23T17:05:11.060 に答える