2

だから私はopenGLを学んでいますが、非常に奇妙だと思うことの1つは、カメラが原点にとどまり、同じ方向を向いていることです。カメラの移動と回転を実現するには、カメラの代わりにワールド全体を移動および回転する必要があります。

私の質問は、なぜカメラを動かせないのですか? directx を使用すると、カメラを移動できますか?

4

2 に答える 2

6

これは興味深い質問です。答えは、固定カメラについて話しているときに、実際に何を意味するかによって異なると思います。

実際のところ、openGL には固定カメラがあると言う代わりに、openGL にはカメラがまったくないと言う傾向があります。

一方、openGL API が世界を動かしたり回転させたりするというあなたの解釈には同意しません。

代わりに、openGL API は世界を動かしたり回転したりしません。

openGL API にカメラの概念がない理由は、それが高レベルの抽象化レイヤーとしてではなく、コンピュータ グラフィックスを表示する際の計算上の必要性に関連しているためだと思います。

主に 3 次元シーンの表示について話していることをお勧めしますが、これは 3D 頂点データを 2D ラスター イメージに変換することを意味します。

レンダリングされるすべてのフレームに対して、これには、シーン内のすべての頂点の 3D 座標を、画面上の対応する 2D 位置に変換する変換が含まれます。

すべての頂点を画面上の適切な位置に配置する必要があるため、概念的にカメラのようなものを動かしたり、単に世界全体を動かしたりしても、計算上の違いはまったくありませんが、それでも同じ変換を行う必要があります。

画面上の頂点の「正しい」位置を計算するための数学は、行列と呼ばれる数学オブジェクトによって記述できます。これを 3D データに適用すると (このアプリケーションで使用される数学用語は行列乗算です)、次の結果になります。必要な 2D 画面座標。

基本的に、3D シーンのレンダリングでは、カメラが存在するかどうかに関係なく、すべての頂点が何らかの変換行列によって処理され、頂点の元の 3D データはそのまま残ります。

3-D 頂点データはまったく変更されないため、openGL は世界をまったく移動または回転しないと言えますが、この「観察」は観察者の視点に依存する場合があります。

実際のところ、3D 頂点データをすべて変更せずにそのままにしておくことは、累積された丸めの不正確さが原因で 3D シーンが変形するのを防ぐために不可欠です。

openGL API で、誰が、何が、誰を、いつ、なぜ動かしたかについて、私の意見を述べることができれば幸いです。

openGL API の使用に単語の移動が含まれていないことを確信できなかったとしても、何も重み付けしないという事実を忘れないでください。

ところで。質問で言及されている独自のライブラリについてわざわざ調査する必要はなく、オープン スタンダードに依存し続けてください。

于 2013-02-09T07:26:03.430 に答える
2

世界を動かすこととカメラを動かすことの違いは何ですか? 数学的には...ありません。どちらでも同じ数字です。それはすべて視点の問題です。カメラの抽象化を正しくコーディングしている限り、それが世界を動かしていると考える必要はありません。

于 2013-02-09T07:24:18.543 に答える