3Dとは?
3Dとは3次元の空間上で表現される事です。
ただ完成した絵を表示するモニターは2Dなのでプログラムで下記の工程が行われています。
- ローカル座標系からワールド座標系に変換する
- ワールド座標系からビュー座標系に変換する
- ビュー座標系からプロジェクション座標系に変換する
- プロジェクション座標系からスクリーン座標系に変換する
座標系の向きについて
3Dの座標系には右手座標系と左手座標系があります。
このように座標系の違いによりZ軸の向きが異なります。
又、回転方向もそれぞれ異なります。
左手座標系では時計回り、右手座標系では反時計回りが正の回転方向として定められています。
どちらの座標系が採用されているかは環境によって異なりますが、基本的には右手座標系が標準とされています。
DirectXでは非標準の左手座標系が採用されています。
OpenGLは右手座標系や3Dツールなどは右手座標系が採用されていることが多いです。
ローカル座標系とは?
基本的に3Dのオブジェクトは自身を中心として作成されます。
例えば敵のモデルが(X:10, Y:0, Z:10)の座標に表示されるからモデルを作ってもらう時にそこの位置に作ってもらうなんて事はしないのです。
そうやって作ってしまうとちょっと場所を変えようと思うと毎回モデルデータを修正する必要がありますし、ゲーム上で動かす時も実際の場所が分からなくなってしまいます。
なのでモデルはそれぞれが自身を中心としたローカル座標系で作成されています。
ワールド座標系とは?
ワールド座標系とはゲーム内の空間上での座標を表す座標系です。
プレイヤーや敵の位置などがここで決まるので最も多く制御する部分だと思います。
今どこにいるのか絶対値で制御することになります。
現実世界と同じような考え方なので理解もしやすい部分ではないでしょうか。
ビュー座標系
ビュー座標系とはカメラを基準として計算された空間のことです。
簡単に言うとカメラから見た空間ということです。
全てがカメラからの相対的な値として計算されます。
プロジェクション座標系
ビュー座標系ではまだカメラから見た3D空間上の値でした。
実際に画面に映るのはカメラから画角を考慮して見た視錐台(台形)の範囲です。
ただ画面は2Dなので台形は表示できないので、奥行はあるけど縦横が同じの長方形に変換します。
この際に奥にあるものほど小さく遠近感を持って見えるようにしています。
又、画面比率や奥行の範囲を絞っています。
スクリーン座標系
表示する際の画面上の位置と合わせた2D座標系です。
スケーリング等はこのタイミングに簡単に行えます。