1

iPhoneが横向きモードで保持されるようにビューが回転する3Dシーンで「ピッキング」を機能させようとしています。私は OpenGL ES 2.0 を使用しています (したがって、すべてのシェーダー、固定機能のパイプラインはありません)。

レンダリング コード内からアンプロジェクションを実行し、すぐに GL_LINES を使用して結果の光線を描画しています (光線は、画面に初めて触れたときにのみ計算されるため、後でカメラを動かして結果の線をさまざまな角度から観察できます)。 .

私のプロジェクト解除コード/呼び出しは問題ありません (オンラインの gluUnproject の例がたくさんあります)。私の行列反転コードは問題ありません (いくつかの行列については Excel と比較しても)。ただし、結果として得られる光線は、実際に「クリック」した場所から少なくとも 5 ~ 15 度ずれています (シミュレーターでは実際にはクリックであるため、非投影からより多くの精度が期待されます)。

ビューが横向きに回転します (透視投影マトリックスを作成した後、Z 軸を中心に -90 度回転します。縦横比は縦向きのままです)。数学がオフになっている問題はここにあると思います。

特にランドスケープビューでピッキング/アンプロジェクションを行った経験のある人はいますか?

4

1 に答える 1

0

単に視野を外すことは可能ですか?従来のパイプラインによく似たものに固執していると仮定して、モデルビューマトリックスを反転し、一般的なプロジェクト解除コード(つまり、目のスペースを埋めるために両方向に90度の視野を想定するコード)を使用している場合は、それ。

簡単な診断テストは、さまざまなタッチでどれだけ離れているかを確認することです。投影の中心に近いタッチは、正解に近いはずです。

iPhoneのように正方形のピクセルを使用する画面では、アスペクト比は垂直方向のフィールドに対する水平方向のフィールドの比率にすぎません。したがって、それについて非科学的になりたい場合は、使用している視野、たとえばfを見つけて、結果に90/fまたはf/90を掛けてみてください。それでもうまくいかない場合は、そこに480/320または320/480の係数を入れてみてください。

より良い解決策は、コードをたどって、実際の水平および垂直の視野が何であるかを把握することです。そして、結果に90を超える値を掛けます。

于 2011-03-14T22:41:38.690 に答える