2011-06-23 4 views
1

私は3つのOpenGLオブジェクトを同時に表示しています。ユーザーがそれらのいずれかに触れると、その特定のOpenGLオブジェクトだけが画面に表示されます。glUnProjectまたはGL_SELECTを使用せずにiPhone上のOpenGLでオブジェクトを選択する方法は?

+1

OpenGL ESでは選択バッファがサポートされていませんが、gluUnProjectを使用しないのはなぜですか? – tkerwin

+0

[OpenGL ES(iPhone)Touch Picking]の複製が可能です(http://stackoverflow.com/questions/2231433/opengl-es-iphone-touch-picking) –

答えて

4

gluUnProjectを使用して、タッチポイントを近くのクリッピングプレーン上のポイントと遠いクリッピングプレーン上のポイントに変換するだけです。 ray-triangle intersectionアルゴリズムでは、これら2つの点の間の光線を使用します。どの三角形が最も近いのかを調べ、その三角形がどのようなオブジェクトであってもあなたのオブジェクトです。別のアプローチは、各オブジェクトに固有のIDカラーを与えることです。次に、ユーザーが画面に触れるたびに、照明なしで独自のIDカラーを使用してレンダリングしますが、レンダーバッファは表示しません。これで、ユーザーがタッチしたピクセルの色をチェックし、それをオブジェクトカラーIDのリストと比較することができます。すばやく簡単で、最大16,581,375の一意のオブジェクトをサポートします。

+0

ありがとうございます。 – Sivakumar

+0

こんにちは私はこれに私のコードを含めた。私は近い計画と遠い計画を計算しました。 (OpenGLオブジェクトのタッチを見つける方法)。 – Sivakumar

+0

- (ブール)checkCollission:(CGPoint)winPos {\t \t winPos.y =(float)__ viewport [3] - winPos .y; \t \t Point3D nearPoint; \t Point3D farPoint; \t Point3D rayVector; \t \t //周辺の平面に投影された位置をRetreiving \t gluUnProject(winPos.x、winPos.y、0、__modelview、__projection、__viewport、&nearPoint.x、&nearPoint.y、&nearPoint.z)。 \t \t //遠平面に投影された位置をRetreiving \t gluUnProject(winPos.x、winPos.y、1、__modelview、__projection、__viewport、&farPoint.x、&farPoint.y、&farPoint.z)。 – Sivakumar

1

あなたはシーンのすべてのオブジェクトを解析し、gluUnProjectのおかげで計算した光線とそれぞれの可能性のある衝突をチェックする必要があります。

顔またはオブジェクトを選択するかどうかによって、効率のために、オブジェクトの境界ボリュームなどの境界ボリュームなどとのレイの衝突をテストできます。