備忘録とか実験とか -2ページ目

コントローラー買ってきた

さっぱり時間取れなくて全然XNA触れてないです。
それでも何とか日曜日にヨドバシ行ってコントローラーだけ買ってきました。
接続がUSBに変わっただけなのに3900円って・・・もうね・・・まぁいいや、仕方がない。
んで、帰ってきてから早速接続。快調な動作を確認。
その後、先駆者達のサイトでコントローラー周りを調べて実装を考える。
トリガやリピートがデフォでは無いようなのと、クラス名がやたら長いのも気に入らないので、自作クラスにラップ。
クラスの動作テストをしたところで3時を回ってたので就寝。
うーむ、一日が48時間あれば・・・

弾丸と地形の衝突判定計算回数(リベーンジ!)

ここんとこ忙しくて何も出来なかったのですが、ようやっと時間が出来たので、360開発が進められました。
で、何したかってぇと。
地形と弾丸の衝突判定の高速化っすわ。

いやね、ご飯を食べるときも、シャワーを浴びてるときも、ベッドに横たわったときも、必ず一回は思い出すほど気になってたんです。


前回少しだけ高速化したにはしたんだけど、どう考えても実用レベルじゃないのよね。
それに、衝突判定って3Dの肝じゃない。そんな根幹部分がヘタレじゃその上にもたいしたもの載せられないしね。
ってなわけで、今回はワリとがんばりました。


まず最初に用意したのは↓


2万ポリゴンの地形

画像がばっちいですけど、白線が地形の3角ポリゴンで、赤線が弾丸の1フレームあたりの移動です。
ちなみに、地形のポリゴン数は2万△ポリゴンっすな。

さてさて、とりあえずこの条件で総当り判定を行ってみたところ、やはりさんさんたる結果に・・・
1フレームあたり50回の衝突計算で1FPSとかそんなです。
試しに100回とかやらせてみたら案の定ピクリとも動きませんwww


うーむ、今回の敵は強い。
心して応ぜねば。


煙草と珈琲を大量に消費しつつ、やっとこ1案。
地形を4分割してみることにしました。
地形のモデルをぴったり包める大きさの立方体を作り、地形の中心から4分割してポリゴンを割り当てれば、なんと!衝突計算回数は1/4に!
なるわけ無いよね。空前絶後のぬか喜びです、ハイ。
それら分割された空間の境界を1つ超えたら2/4=1/2だよね。
弾丸が直線的に飛ぶとして、飛翔距離が長かった場合や、中心に近い場所から発射されれば3つの空間の境界をまたぐこともあるんだから、これは根本的に1/4しか高速化されてないのよな。
うーむ、しかし、しかしだ、考え方はコレでOKな気はする。
近いポリゴン同士を立方体に内包し、最初に立方体と弾丸で衝突判定すれば余計なとこは計算から省けるやね。

じゃ、とりあえずまとめてみっかぁ。てなわけで今度は空間を10x10x10のグリッドで分割。
おぉ!いいじゃない!グンと速くなった!
つか、律儀に立方体一個一個調べなくても、もっとまとめて計算すりゃいいじゃんね。
立方体を中心から分割し、それを再帰的に3回くらい細分化。
で、その末端の一番小さな立方体に接触するポリゴンを格納。
ついでに、ポリゴンが内包されない立方体はリストから削除。

データ構造は↓のような感じ

全体┬左前上の空間┬左前上の空間┬左前上の空間のポリゴンリスト
                        ├左前下の空間のポリゴンリスト
                        ├右前上の空間のポリゴンリスト
                        ├右前下の空間のポリゴンリスト
                        ├左奥上の空間のポリゴンリスト
                        ├左奥下の空間のポリゴンリスト
                        ├右奥上の空間のポリゴンリスト
                        └右奥下の空間のポリゴンリスト


1立方体を中心から分割すると8個の立方体が出来るのだから、
8x8x8・・・
ってな感じのツリー構造になるのよな。
んで、弾丸の線を全体に近い立方体から衝突判定していけば良いわけだ。
で、末端の立方体まで判定してみて尚接触しているようならポリゴンとの精密な判定を行うと。
珍しく冴えてますよコレwww


そして本日の成果物↓


2万ポリゴンの地形:高速化2

2万ポリゴンの地形:高速化1

青線=末端の立方体
灰線=立方体が内包しているポリゴン
橙線=赤線と交差したポリゴン


結果から見れば本日は大成功だの。
改修前は50回で1FPSをきってたのが、改修後は200回ほど計算させても15FPSくらい出てくれます。
1フレームで地形の端から端までぶっ飛ぶようなものが一度に沢山発射されるときついですが、会社のオンボロPCでこれなら十分実用レベルになったのではないでしょうか。
さぁさぁ、今日は帰って祝杯でもあげよう。

AJAXに触れてみる

AJAXに触れてみました。

それぞれの機能をフローティングウィンドウを使ってOSっぽく動作させつつ、それぞれのウィンドウが非同期通信でリアルタイムに情報を更新しながらDBにデータも溜めていくような管理画面のデモ作ってました。うむ、わかり辛いねw


実際Ajaxを取り入れて開発をしてみたところ、非同期通信とフローティングウィンドウの組み合わせは全体の見通しが良くなるし、紙芝居的な管理画面よりはよほど使い勝手が良いと思いましたとさ。あとは開発効率やMVCとかがしっかりすれば実用できそうだなぁ。