z値の可能性

ViewPortでzのことを考えていたので、ついでに。


DXRubyは2D描画だから、zは描画順のソートにのみ使われる。
ポリゴン描画の座標を計算するときにzを使って透視座標変換すれば疑似3Dができるようになる。
4点の座標をそれぞれxyzで表現するようにすれば自由度は高くなるが、Rubyでの計算が多い割に回転以外には妙な変形にしか使えず、効果が薄い。
板ポリゴンを3D空間に描画するという意味では、xyz軸に対する回転角度と座標xyzを渡したほうが使いやすそうだ。


三角形の頂点を大量に用意して、そこにテクスチャを貼れるようにしたら、きちんとした3D表現ができるようになる。
例えば頂点を突っ込んだ配列を作って、描画位置と回転角度とテクスチャを指定すれば描画できます、とすると、ちょっとした3Dゲームが作れるようになる。
まあ、妄想だが。
俺自身が3Dゲームに興味ない(すぐ酔う)から、ほとんどユーザーのいない今の状態でそういうものを作る気は無い。
機能追加して、それを誰かが使ってくれるなら考えるかもしれない。
いまのところは可能性だけだ。


zを描画順ソートじゃなく透視座標変換に使う描画モードを追加する、というのは手段としてはありえる。
細かいパーツを並べて地面を描画するのは座標計算が大変だから、DXRubyMapを拡張して地面を描画する機能を追加してみるとか。
座標xyzと回転角度xyzを渡すとすれば、頑張れば板ポリゴンでなんか形を作ることもできそうだ。
そうなってくると座標計算はRubyでやるには大変すぎるから、配列に入れた座標の集合をまとめて変換する機能をDXRubyExtensionに追加したりすれば実用になってくる。
物体が視界に入っているかどうかは、2Dの座標上で視界範囲の形とそれぞれの物体の衝突判定をDXRubyExtensionでやれば高速だ。
どっちかというとDXRuby本体の変更はほとんど無くて、それらをサポートする側、計算する側に速度が要求される。
本格的な3D表現はそのほんの少し先にある。
ほんの少し先だが、ちょっと考えただけでもとんでもなく大変だろうというのは想像できる。


DXRubyでサポート可能な疑似3D機能は、要するに3D空間に平面のスプライトを自由に描画することができる機能だ。
それを追加したところで何ができるようになるかと言うと、よくわからないのだが。
あとは使う側のアイデア次第なんだろう。