2012-03-08 8 views
1

私はそれが宇宙を通るとき、窓の中心に宇宙船を描きたい。世界のウィンドウをスクロールするために、私は船の新しい位置を計算し、glOrthoを使ってこの周りに4000x3000のウィンドウを中心に置いています。私のテストは、前方ボタンを押して船を上に動かすことです。ほとんどのマシンで問題はありません。遅いLinuxラップトップでは、毎秒30フレームしか得られませんが、船は前後に震えます。マウスポインタとの相対的な位置(移動しない)を比較すると、船は数ピクセルだけ前後に飛び降りて見えるはずです。星はまた、短い線でぼやけて見える。スクロールゲームにglOrthoを使用しています。宇宙船「震え」

私はそれが変化しているかどうかを確認するために、船の中央の画素値を照会したいと思います。

OpenGLワールドポイントを供給して元に戻す方法はありますか?

答えて

1

私はそれを他の方法で回避を行うことを検討したいです。船を世界座標0,0に保ち、それに関連して世界を移動させる。次に、ウィンドウのサイズが変更されたとき(カメラが固定位置にあるとき)、glOrthoコールが必要になります。毎回投影行列を計算する必要はありませんが、あなたの世界が将来大量になると、倍精度位置を使用するオプションがあります。浮動小数点のオフセットが大きすぎると、位置が不正確になります。

あなたが任意のオブジェクトを描画する前に、モデルビュー行列を操作して、船を描画するときに異なるマトリックスを使用し、あなたのスペースのシーンを描画します。

は、ピクセルは、ワールド座標から座標点を取り、モデルビュー行列を掛けた投影行列(あなたは正しい道の周りの乗算を取得することを確認してください)を掛け取得します。 -1と1の範囲でxとyを持つ値が得られます。[1,1]を追加し、画面サイズの半分を乗算してピクセル位置を取得することができます。 (必要に応じて、これを行列変換に追加することもできます)。

+0

+1それは新しい考えです。私は現在、すべてが素敵で簡単なので、現在はそれに熱心ではありません。私はあなたの最後の段落の数式を理解していません。なぜ1を追加してから画面サイズの半分を掛けるのですか? – ScrollerBlaster

+2

@ScrollerBlaster:これは「新しいアイデア」ではない。それは*どのように行われているのですか。ゲームは何十年もの間それを続けてきました。 'glOrtho'はあなたのビューポート内のビューのサイズを記述するためのものです(それよりも少し複雑です)。あなたが望んでいるのは、船の位置を追跡する*カメラ*です。それは 'glOrtho'とは関係ありません。カメラを持つことは、世界と船の相対的な動きに数学的には同じです。 –

+0

@ニコル私はそれを知らなかった。なぜカメラを動かすためにglOrthoを使用しないのですか?確かに直感的です。 – ScrollerBlaster

関連する問題