射影変換テスト中

実験中の画像なので過大な期待はしないように。


とりあえず、SetTransformで射影変換すればこういうことができるというのはわかった。
しかし射影変換する場合の座標指定はxyともに-1から1のため、例えばこの状態で一番手前に描画した場合に、2D描画と同じようにきっちりピクセルが決まるかというとそうはならない。
なんらかのzを指定した場合にスクリーンにきっちり収まるような変換ができるなら、全ての描画を3D演算するようにしてもいいのかもしれないが、その場合、描画時の演算が増えてメインの2D描画速度が落ちる可能性がある。
できるにしても射影変換を完全に理解して変換行列を作る勢いになるだろうから、さすがにそこまではできない。
DirectXのヘルプにも「一番難しいのは射影変換」って書いてあるぐらいだし。


やるなら、2Dモードと3Dモードを分けてしまって、座標系を別にするか。
そうすると、3Dモードではきちんとした3D処理をしないとまともにゲームが作れなくなる。
そっち方面で機能拡張をするつもりならそれもありだが、俺としては3Dゲームを作る環境は目指していないから、そういうのは考えない。
そうすると、2D描画に3D描画を融合させることになり、これをどうやって計算するのか、というところが問題になる。
計算というより、そういうことができるのか、ってレベルの話だが。


俺的な理想は、zを描画順として使うか、それとも奥行きとして使うかのモード切替の実装だ。
で、座標4点をそれぞれxyzで指定するメソッドか、スプライトをxyz軸で回転させるメソッドを追加する。
どっちのモードでも、通常描画でzを0にすれば同じ結果になり、zを指定した場合にどうなるかが変わる。
zを奥行きとして使った場合にのみ、xyz軸回転などができるようになる。
というような感じだったが、DirectXのzは最小が0で、それより手前にくるとクリッピングされてしまうから、とりあえずダメだ。
zの範囲を0〜100にして、10を指定したら2D描画と一致するような感じにできればいいのだろうが、それははじめに書いた射影変換の理解が必要な処理になるし、理想的にきっちり収まるかというと疑問だ。


まあ、なんしかまだまだ勉強と実験をしていかないと、現状では実用レベルには程遠いということだ。