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

<前 次>

DMP

作りかけで完成させる意欲のないDirectMusicPlayerをプログラミングコーナーのサンプル&ソースコードにアップしました。

物理シミュレーション

ゲーム開発のための物理シミュレーション入門という本を買ってみましたです。
使っている物理法則そのものはそう高度なものではないようですが、布のシミュレーションが面白そうだったので。
しかし予想以上にパラメータ変化にシビアなようで、ちょっとポリゴン数を増やしただけで布消滅。
果たして実際に使えるようになるのだろうか…。
剛体の衝突シミュレーションでもとんでもない飛び方してる様子だし。

マウス

考えてもみればパネルγはマウス操作だったんですよ!
というわけでマウスカーソルのソフト表示に対応。
画像転送の部分も改良。
一部がはみ出すような場所にも表示できるようになりました。
さて、気になるのがBGMに使うDirectMusic。
IDirectMusicPerformance8::PlaySegmentExでi64StartTimeを0にして実行するとできるだけ早く演奏が開始されるらしいけど、この遅延時間が60msを超えると使っている音楽の性質上異常演奏になってしまうのです。
できるだけ早く、だから結果が不定になるのなら、あえて開始時間を設定して開始時間のほうに遅延時間を吸収してしまうとか…

マテリアル

う~ん、もともと色のあるメッシュでトゥーンレンダリングをすると元々の材質(色)が無効になってしまいます。
材質にはライティングの設定なんかも入っているためライティングをオフにすると材質もろとも無効になっちゃうようです。
例えば材質ではなく頂点カラーを使うとか?
例えばテクスチャに色をつけるとか?

あう~、レポートやらねば…
明日中に終わらせて月曜日は休みたい。

あんまり遊べなかった…

いろいろできそうに見えて案外面倒な設定が必要だったり結果が結構地味だったりして、画像ほど際立った効果は実感できませんでした。
さりげなく使って陰で雰囲気を盛り上げるような使い方なのかなと思ったりします。

パネルγのタイトルBGMを作りました。
パネルを消したときの音とゲームのメイン音楽との組み合わせです。

メッセージを送ると何かが起こる

DirectMusicですよDirectMusic!
VB用でもC/C++用ほどではないけどいろいろできるんですよ。
今夜はメッセージ送りまくって遊ぼう。

そしてDirectX7

「パネルγ」、DirectX8を使うということで何も考えずDirectXGraphicsを使っていたのですが、今更言うまでもなくこのゲームはバリバリの2Dゲーム。
Direct3Dが得意とする回転拡大縮小やらアルファブレンディングやら、ましてや頂点シェーダやらピクセルシェーダなんかとはまったく無縁のシロモノ。
アルファブレンディングだけはパネルが消えるエフェクトに使えそうですが、使うのはどちらかというとひたすら矩形転送というDirectDrawが大得意とする分野がメインなのでそっち使ったほうがよさそうな気がします。
ついでに言うと、効果音はMEを使う可能性があるので、DirectXAudioのDirectSoundとDirectMusicとの統合があんまり意味を成さず、DirextX6.1のDirectMusicで充分そうな気もして、そうなるとグラフィック7、サウンド6.1となり、DirectX8を使う意義がなくなったよう感じます。
さて、問題はコンパイルが通るかどうか…

鉤爪ロープで気絶したり

というわけでトゥーンレンダリング第2ラウンドに取り掛かり始めました。
大まかな原理は過去の日記に書かれているのでそちら参照。

「ゼルダの伝説-風のタクト」をやってました。
ゴードンの音楽変化パターンを見極めたり(サントラでの01:02までが顔行動開始前、それ以後が顔行動開始後に対応している)、ファントムガノンに回転斬りジャンプ斬り空き瓶で対抗したり特殊攻撃を成功させたりし(剣攻撃のときにA!)、ジークロックにいろんなアイテムを試してみたりして(仮面破壊後は何でも効く)、最終的にジークロックは置いてある爆弾を突っついて自爆。
やっぱ大ボスは弱いよ。

実質三行

トゥーンレンダリングの続きでもやろうかと思っています。
まずはトラのテクスチャを貼れるようにして、スペキュラを使えるようにして、シェーディング用のテクスチャに小細工を仕掛けて、でも輪郭抽出はやめておいて、どうせ輪郭つけるなら先進的でエレガントで、しかし不完全な方法よりも、原始的で力任せで、それでも確実な方法をとりたいと思っています。
できるんかいな…

迷惑な話じゃ

えーかげんDirectX9SDKでコンパイルできないのに痺れを切らしたので、DX9SDKをアンインストールし、DX8.1SDKをマイクロソフト以外から探してきてインストール。
一発でコンパイルが通りました。
これでまたパネルγの開発が再開できます。

今日は飛び込みがあったらしく電車が30分遅れに。
1時間ほど余裕を見て家を出ていたからよかったものを…

.NET

学校のVC++.NETでDirectXが使えなかったからVB.NETのほうで挑戦。
VB8からアップグレードする機能かなんかを使ってコードを書くまではできたけれどもセキュリティエラーにより動かず。
うちの学校は開発環境用意しておくだけ用意しておいて使えないようにしておくのか!?

困ったときのリビルド

DirectX9をインストールしたらDirectMusicで一部の曲の演奏が変になるようになりました。
よりにもよって自分の作ったMIDIが…
しかもDirectX9SDKだとVC++6でDirectSoundが使えないときた!
…と思ったらリビルドしたらあっさりコンパイルが通ったり。あほらし。
stdafx.hを変更したらリビルドするってことまだ覚えんのか自分は!
とりあえず理不尽なエラーが起こったらリビルドすればいいと覚えておこう。

「パネルγ」がルミネスに似ているというのは、問題なしということにしておきます。
四角形を作るというのは案外誰でも思いつきそうだし、落ち物と入れ替えではゲーム性も大きく違うし、音楽もコンセプトが全然違うみたいだし…

具体的な仕様についてですが、まず、FPSは、ゲームが4分の3秒単位で進行するため4の倍数、また、ミリ秒単位で性格にタイミングを合わせる必要があるため1000の約数、ついでに一般的な画面のリフレッシュレートは60FPSなのでそれ以下の数値、コマ数が少ないとパネルが落ちる表現やプレスから逃げる表現がしづらいので高いFPS、ということで、40FPSに仮決定。
コンボは一回につきコンボ継続数のみに比例した得点、連鎖は基本得点と連鎖継続回数に比例した得点、同時消しは単純にそれらの総和。
ただ、大きい正方形で消すと中に小さな正方形がたくさんできることになるので、同時消しも案外儲かると思います。
でも普通に消していくと多分数百点くらいがいいところだろうと予想しています。

再インストール完了

ブラウザを入れなおすためLunascapeのサイトに行ったらバージョン2があったのですが、プレビューリリースということで、今は導入しないほうがよさそうだし、だからといって旧バージョンをインストールしてもすぐにいらなくなりそうだったので、とりあえずしばらくはIEで我慢ということになりました。

1日に更新していたのですが、トップページの更新を忘れていました。

DirectX8.1SDKがなかったので仕方なく9SDKをインストール。
サンプル見てみたけど数は少ないし大して見た目変わんないのにピクセルシェーダなんか使ってコンマ数FPSまで重くなるし、利用者を舐めてんのかと言いたくなる内容。
実際に製品として組み込むときにはピクセルシェーダを使わない設定とか付けたりするんでしょうかね。
とりあえずこれで「パネルγ」をリビルドしてみたけど必要環境がDirectX9になってしまっていないか不安です。

CGI&PHPの動作確認環境も何とか復帰。
ついでに新日記もちょいと更新。

微妙なものを作ってみたいものです

「パネルγ」はマウスを激しく動かすという特性上よほどのことがない限りフルスクリーンモードでの利用になるのですが、そのときBackBufferFormatをD3DFMT_A8R8G8B8にするとREF(要するに一応動くが重い)モードでデバイスが作成されたので、本当にA8R8G8B8が必要かと考えると、バックバッファはそのまま画面に表示されるんだからA値なんて不要ということで、X8R8G8B8にするとTnL(要するに速い)で動いてくれたようで、一応対応しているディスプレイモードを調べてみたら、R5G6B5の65536色モードも使えるようなので、どちらかを設定から選べるようにしてみたいと思います。

「Bomber丸」の32bit版を作りました。
VB6でVB2のプロジェクトを読み込んでコンパイルしなおしただけですが、VB2ランタイムのない新しいコンピュータでもVB6ランタイムがあれば動きます。
そこまでしてやりたくなるかどうかは微妙なところですが…

そういえば「微妙」って「美しさや味わいがなんとも言えずすぐれているさま」って意味もあるようですね。
「美妙」と同じ意味ですが。
ということは、良いか悪いか聞いたときに「う~ん、微妙。」と答えてもらったらすぐれていると言ってもらったことになるので喜ばしいことなのです。
ついでにいうと、「微妙」には「微」という文字があるにもかかわらず「少ない、小さい」といった意味は本来なく、強いて言うなら、比較対象との差が小さいことが微妙ということらしく、数学的な表記をあえて使うなら、x≒0ではなくdx≒0ということであるようです。

明後日がレポート、明々後日がまたテスト

学校のパソコンに入っているVS.NET2003にはlibci.libがないのでDirect3Dを使ったプログラムがビルドできないようです。
最初からSDKが入ってるくせに使えないとは何事かっ!
他のVS.NETはどうなんでしょうか…

XPの丸いウィンドウの淵、ウィンドウモードならともかくフルスクリーンモードだと四隅が開いてしまうので右上をクリックしてしまったときものすごく困るんです。
ウィンドウの淵をなくすかウィンドウを最大化すれば隙間はなくなるんですが、VBみたいにボーダースタイル無しはCreateWindowではできないみたいだし、最大化してもダブルクリックで元に戻っちゃうし何故か移動できちゃうし…
でもVBだって内部ではAPIを使っているわけだし、できないことはないと思うのですが。
サンプルでもこのあたりは妥協しているようです。
「パネルγ」はなかなか思うようには進みません。

テスト、直前しか勉強しなかった割にはできたような気が、でも、直前しか勉強しなかったなりの点数にはなりそうな気がします。

家のパソコンでも3Dやってみました。
SDKに付属のサンプルをいろいろ改造。
やりたいのはトゥーンレンダリング。
球とか円筒などの簡単なのを表示しても面白くないから、チュートリアルの最後、Xファイルからメッシュを読み込んで表示するサンプルを使ってみました。
とりあえず虎のテクスチャは要らないので表示コードをコメントアウト。
そしたら灰色一色の虎が。
テクスチャ貼ってるだけの色もライティングもない虎だから当たり前ですけど。
で、ライティングのサンプルからその辺の処理引っ張ってきたら今度はほぼ真っ黒に。
これは環境光の色そのままだから、恐らく法線ベクトルが定義されていないために直接光の成分がなくなったためだと思われます。
と、とと、まてまてまて、もうひとつ、オブジェクト側では反射のしかたにも2種類あって、そのうちのアンビエント反射、要するに入射角と反射角が一緒ってことは、「ふにゃふにゃ」のビーム反射処理にも応用できるんじゃないか?
それでもって、話は変わってDirectMusic、これまたDirectX8では良さそうな機能が追加されてたりして、全面的に8使うようにしようかなと思っていますが、DirectDrawがなくなったことを考えると思い切れないのも事実だったりします。

パズルゲームを考えています。パネポン風味のやつを。
数色に色分けされた長方形(以後これをパネルと呼ぶ)を画面の特定の範囲にルールに沿う範囲で整然と並べ、任意の2パネルを交換することによりルールによって定められた数種類のパターンのうち最低一つに一致するようパネルの配置を変更し、パターンに一致したパネル全てを消去し、それにとって得点を得る、また、パネルが消去されたことに起因してパネルの配置が換わり、それにより新たにパターンに一致する配置を作り、連続して消去すること(以後これを連鎖と呼ぶ)、そして、一度の操作でより多くの、またはより困難なパターンに一致させることにより通常より多くのパネルを消去すること(以後これを同時消しと呼ぶ)、さらに連鎖動作中にパネルを移動することにより、連鎖終了後に再びパターンに一致するように配置し、連鎖を続けること(以後これをアクティブ連鎖と呼ぶ)により通常より多くの得点を得ることのできるゲーム、ということです。
もちろん違いもありますよ。

縦や横に並べるわけじゃない
これをやっちゃったらパネポンそのものでしょーが!
次世代らしく、四角形になるように並べます。
可愛い女の子が出ない
昔にも言ったことがあると思いますが、そんなもの私に期待するもんじゃありません!
そして本当に誰も期待していないんですね…
せりあがってこない
その代わり横からプレス機が迫ってきます。
横長
横から迫ってくるので横長にします。
マウス操作が基本
隣同士を入れ替えるのではありません。
好きなところ2箇所をマウスでクリックして入れ替えるんです。
パネルが多い
ちょっと理由があってパネル数を多くします。
多分目一杯パネルを出したら1000個超えると思います。
ほかにも、こだわりたい部分としては、BGMがあります。
パネルを消すとちょろっと短い音楽が鳴りますが、連鎖をすると短かったのがだんだん長くなって、派手になっていきます。
また、通常BGMも、得点や状況で切り替わったりします。
0点の音楽→1連鎖の音楽→1~100点の音楽→1連鎖→2連鎖→3連鎖→4連鎖の音楽→101~300点の音楽→ピンチのときの音楽→ゲームオーバー…みたいな感じで。
ゲーム音楽のインタラクティブ性というものはまだまだ挑戦できることが多そうです。

ピクピクニンジン

ピクミンのページ作りました。
ピクミンってどう考えたって扱いが奴隷。
今のところアップしてません。
気が向いたらアップします。

ちょっと学校のパソコンでDirectX8で3Dでもやってみようかと思ったのですが、チュートリアルが意味不明だったため挫折。
変数が何のために使われてどこでどう定義されて他の変数との関係がどうなのかとかがさっぱりわからないので打ち込んだところでどうにも…
DirectXGraphicsに統合された分簡単だと思ったのですが。

新日記2002年分の過去ログを仮入力完了しました。
12月の日記はほとんど同じ話題が続いていたので楽でした。
さて後1年半分…

そろそろ更新しようかと思います。
ByteEditかDirectXでも。

DirectMusic更新しました。
MIDIは何度も何度も何度も何度も繰り返し聞くことになるので、ループ部分はわかりやすく、かつ短くしてあります。
画像の大きさがちょっと微妙なところです。
640x480のサイズだと大きさそのものは問題ないんだけどスタイルシートのせいで左に大きく隙間が開くのでその分だけ右にずれて画像が少しはみ出てしまうのです。
まあ大事な部分は画面に入りきるから別にいいんですけど。
暇があったら音符の間をもっと詰めて、小さい画面でも収まりきるように調整してみます。

<前 次>