「DirectX」に関する日記(2)

<前 次>

なんて素敵な土曜日

トゥーンレンダリングのページをちょっと移転しました。
例によって最低1年間はリダイレクトしているので特に気にする必要はないかもしれませんが。

んで、例の当たり判定プログラム、球の当たり判定だけですがいろいろ動かせるようになったのでちょっとアップしてみます。
Debugフォルダの3dgame1.exeが実行ファイルです。
操作は以下の通り。
・全モード共通
 Tab・Shift+Tab:ターゲット切り替え
 W:押している間ワイヤーフレーム
・カメラ操作モード(ターゲット指定なし)
 上下左右:見る方向を変える
 Z・Shift+Z:前進
 X・Shift+X:後退
 Shift+上下左右:上下左右へ移動
・オブジェクト操作モード(対象オブジェクトが点滅)
 上下左右:オブジェクトをこちらから見て上下左右に移動
 Z:オブジェクトを遠ざける
 X:オブジェクトを近寄せる
 Shift+上下:オブジェクトの拡大縮小
・表示内容の説明
 FPS:60/60だと正常。これが30/60とか小さくなってると処理オチ
 CPU:CPU使用率の目安。100%だと余裕なし
 Sphere:球。中心の位置をカッコ内に、半径をRに
 AABB:オブジェクトの周りにある黄色い直方体。判定高速化のため必要
 Collision:trueなら衝突。上のAABBも同様

1241880911.zip

無題

とりあえず球同士の当たり判定を作りました。
実際の当たり判定とかAABBとかの表示もできますのでデバッグしやすくなると思うのです。

無題

Zバッファを導入して複数オブジェクトを正しい前後関係で描けるようにしようとしたら、予想以上に手間取ってしまいました。
最初に参考にしたプログラムがZバッファのことを考えていないプログラムで、それに対して後からZバッファをつけたのでややこしくなったようです。
あと。地味なところですが、ウィンドウサイズの調整を自動で行うようにもしました。
何はともあれ、やっと当たり判定のプログラムが組み始められそうです。

無題

現在の画面はこんな感じです。
視点とか見る方向とか動かせます。
この辺の視点移動に関していろいろ作っていたので画面自体はあまり面白いものはできていません。

1241621468.png

無題

交互で悪いんですが、今日は3Dのほうをやってました。
空間分割について調べたりカメラの移動を考えてみたり。

無題

とりあえず当たり判定が表示できなきゃどうにもならないということで、昔トゥーンレンダリングをしたときのことを思い出しながら3D表示を作り始めました。
XNAとかOpenGLとか選択肢はあったけど、結局C++/DirectXで。
VisualC++2008とDirectX9を使っています。

無題

なんだか最近また3Dゲームを作りたい気分になってきて、当たり判定やらなにやら勉強しています。
とりあえず、AABB(矩形の3Dバージョン)、球体、カプセル型(線分から一定距離以内の範囲)の当たり判定の数学的な理解はできてきたつもりです。

無題

やっぱりアンマネージドのコードから直接的にマネージドのコードを呼び出すことはできないようです。
DirectMusic自体が元々アンマネージなのでどこかでアンマネージとマネージの橋渡しをしてやらなければいけないのですが難しそうな感じです。

無題

ソースの分割ほぼできてきました。
いよいよツールの実装に取り掛かれそうです。

無題

DirectMusicツールのプログラムを作成中です。
とりあえずコード量が増えてきたので適当なところで分割中。

無題

リセット命令はできた(はず)なので、今度はDirectMusicツールをC#で使えるように作っています。
このあたりはどうやったらうまくいくのかわかっていないのでいろいろ試行錯誤していきます。

無題

急に思いついてNeoMuplに使っているDLLに機能追加しています。
MIDIリセット命令を送る機能なので、その実態となるシステムエクスクルーシブメッセージを送信する機能を作っています。

DirectMusic7をVC#から使うためのDLL

で、実際に作り始めました。
マネージドとアンマネージドの混在するややこしいプログラムにもだんだん慣れてきたところです。
参考にするためBomber丸WorldのBGMクラスを見ていたらIDirectMusicのReleaseし忘れを発見しました。
これもそのうち直そうと思います。

無題

VC++でDirectXのDLLを作ってC#のNeoMuplで使うというのも悪くないかもしれない。
ネイティブとマネージドを混在させる利点ってこういうのぐらいしか思い当たらぬ。

DirectX7に逆戻り

http://takue231.blog74.fc2.com/blog-category-3.html
ここを参考にやってみました。
VistaではDirectX7と8のVB用DLLが削除されてしまっているのでそれを使ったプログラムが動かなかったんですね。
私も便利だから使っていたんです。
せっかく自分で作ったプログラムが自分で動かせないなんて、寂しいですよね。
DirectX9だか10だかもちゃんと残ってますよ。

VistaでのBomber丸World開発環境

メテオンもどきを改良していました。
まず、旧形式のデータを投稿してもエラーが出ないようにしました。
そして、お試しプレイ前にデータ抽出してもちゃんとデータを取れるようにしました。

そうそう、VistaでのBomber丸World開発環境を整えました。
DirectX8SDKを入れてVC6を入れればそれで終わりだと思っていたのですが、ディレクトリ設定で優先するディレクトリを間違えて設定していたため、一部のライブラリが古いほうを使われ、リンクに失敗するということがありました。
もちろん今ではそれも直しましたが。
メテオンもどきでやることがないときはこっちのほうを開発しましょうかね。

ツールの登録

DirectMusicツールの更新のときに書いた、「次の機会」のところを更新しました。
とはいっても、ほぼ定型文なので大した内容にはなりませんでしたが。
あと、ツールの作り方のページでのメッセージの扱いについて少し修正しました。

メテオスもどき、縦切り離し点火の特例ができたのでアップしてきました。
Qに送る文章も考え中です。
自分を正当化しつつ、相手にとっても損がないように、考えてるところです。

IDirectMusicTool

今日はプログラミングコーナーを更新しました。
国内ではあまり記述を見かけないDirectMusicツールについて書きました。
Bomber丸Worldで使う予定の技術なのでちょっとお披露目です。
今検索したところ、海外でもあまり丁寧な解説してくれてるサイトはないみたいですね。

プログラムチェンジができませんでした

BGMシステムのプログラムチェンジとテンポ変更ができました。
…といいたいところなのですが、プログラムチェンジのほうはなぜか正常に動作せず、変更した瞬間から音が出なくなってしまうようでした。
一応、音が出るときもあるのですが、そんな状態ではとても使い物にならないので、プログラムチェンジは使わないか、MIDIファイルを使っての変更で代用しようかと思います。
雰囲気チェンジも作成中ですが、ちょっとメッセージを盗み見るだけのツールとは勝手が違うので戸惑っています。

CControlCheckTool

ふにゃさんのBGMのフェード処理の改良のためIDirectMusicToolをいじったりしてました。
3月14日に書いたことの実装であり、今のところセグメントによるボリューム変更をキャッチするところができていて、それを元にツールにキャッチされないようにこっそりメッセージを送ってボリュームを変更して実際のフェードを実現するところをこれから書きます。
しつこいようだけど、Bomber丸Worldに応用する前提で作っているので、ふにゃさんに特化したものにはせず、ある程度汎用的なものにするつもりであります。

<前 次>