無題
アンパンDBのタイトルジェネレータのプログラムを改良してより再現できるタイトルの幅が増えました。
その分変なタイトルもできやすくなりました。
アンパンDBのタイトルジェネレータのプログラムを改良してより再現できるタイトルの幅が増えました。
その分変なタイトルもできやすくなりました。
そういえばカプセル型描画クラスが過去に作りっぱなしだったのでアップしておきました。
弟に指摘されたのでハウトの死に際の自爆について書いておきました。
今までなんとなくほしかったけど先延ばしにし続けてきた、ナマライザのフィルタのソート機能を今日つけました。
カード0枚プレイで分かったレグルスとリッパーの情報を更新しておきました。
勢いでステータスバーも拡張してまたバージョンアップしました。
とりあえず誤動作とかはなさそうなのでNeoMupl最新版アップしました。
今日はNeoMuplの改良を行っていました。
ひとつはウィンドウ位置を次回起動時に復元する機能、もうひとつはウィンドウのタイトルをカスタマイズする機能です。
再生関連は不安定なので全体的に作り直します。
そのため、しばらくは再生関連での細かい改良はありません。
爆ボンの動画をアップしてきました。
爆ボンやってました。
例のカード0枚の。
ホワイトアイスまで終わったんですが、レグルスで想定外にてこずりました。
ダッシュの判定が意外と長いこと残っていて、大丈夫だろうと思ったら殴られたり、大丈夫だろうと思ったらカードが飛び出したり…。
ただ、そのおかげで発見もありました。
いくつかのボスには動かなくさせるポイントがあるのですが、レグルスの場合は、限界まで近付くと攻撃してこなくなるのです。
ある程度距離をとるか、ボムを出すと普通の行動に戻ります。
リッパーのほうは、意外とすんなりいけました。
基本的に回っていれば攻撃が当たらないので。
点と線分の距離により判定される当たり判定は一通り実装し終えました。
このあたりは似たようなプログラムになるので、ヘルパー関数を作って、内部的にそれを呼び出すことで当たり判定を行っています。
点と線分の距離の計算方法には内積を使う方法とが遺跡を使う方法があり、どちらが速いのかは分かりませんが、とりあえず内積を使うほうにしておきました。
この方法は次元によらず有効なのがいいですね。
例のWikiの入力支援ソフトの例の問題ですが、データの重複を取り除く機能を付けたら、かえって読み込みが早くなりました。
厳密に言うと、同じだけ重複がある場合には、重複チェックをしないよりしたほうが早くなります。
そんなわけで、最新版アップしました。
例のWikiの入力支援ソフトの改良は完了したのですが、先日のバグによりデータが以上に肥大化してしまったので、それを解消するための機能を作っています。
これで多少読み込みが遅くなるのですが、そんなこと言ってられない状態になっているので。
例のWikiの入力支援ソフトにちょっとバグがあったんで直してました。
使っていくうちに重くなっていくことがありましたが、その原因が分かったので修正しました。
あと、声の出演の部分の入力が少し不便だった気がするので、こちらも入力フォームを充実させてみました。
こちらがまだうまく動いていないのでアップしてはいませんが。
当たり判定のほうは進んでいませんが、当たり判定とその境界ボックスの描画は一通りできるようになりました。
そうそう、異なる内容の当たり判定でも同じルーチンを使いまわすことが多いので、そのあたりをまとめたりもしていました。
昨日作ったカプセルの表示を当たり判定の方に組み込みました。
当たり判定自体はまだできていなくて、呼び出すと無限ループに突入してしまいますが。
IE8を入れました。
早い早いとMSさんは言ってますがまずサーバーの応答が遅いのでどうにもなりません。
他のブラウザも速さを自慢しているようですが、逆に言ってそういうブラウザが必要なほど重いサイトが多いというのがどうにかならんのかなーって思います。
ちょっとカプセル型を描画する関数を作ってみました。
メッシュを作る方法が良く分からなかったので、ひとまず座標を指定して直接描画する関数にしてみました。
カプセル座標における単位ベクトルの作成で座標が左手座標系から右手座標系に変わってしまってカプセルが裏返ったり、インデックスがずれて穴が開いたりもしましたが、何とかうまく表示できるようになりました。
もうちょっと体裁を整えたらプログラミングのページにまたアップしたいと思います。
D3DXCreateSphereに近い関数を自作しなければならない状況ができたので、お手本となるD3DXCreateSphereについてまず調べてみました。
で、調べた結果をアップしてみました。
ここんとこ自分のことばっかりで更新が滞っているのでいい機会です。
どうやら、D3DXCreate~系の関数はメッシュの作成時にD3DPOOL_MANAGEDのオプションをつけて、デバイスのロスト時に備えてコピーをとるようにしているため、メモリ使用量が増え続けるようです。
でもReleaseしてどこからも参照されなくなったオブジェクトでもコピーって必要なんでしょうか…。
ためしにほっといたらコピーがたまり続けて何百MBにもなってたし…。
なんだか今日は妙にDirect3Dが重くて、調べてみたところ、なぜだか秒間30KBぐらいずつメモリ使用量が増えていっている模様です。
しかもなぜかライブラリ関数のDrawSubsetで。
メッシュのポリゴン数を増やしたら最初は勢いよくメモリを消費するけど最終的には元のペースに落ち着くし、DrawSubsetを複数回呼び出すとその分メモリ使用量が増えます。
動作が重いほうはどうにもBeginSceneとEndSceneだけでなるようだし…。
ふにゃさんのほうは、項目選択系の設定変更ができるようになりました。
ただ、設定変更したときに特別の処理を要するもの(BGMなど)に関してはまだ対応できていません。
あと、BGMに関しては、元々あったBGM変更ボタンは無効にして、設定でのみ変更可能にしようと思います。
例のWikiの入力支援ソフトをちょっとバージョンアップしました。
・演出入力フォームをウィンドウの大きさに追随するよう修正
・絵コンテと演出リストの参照データを分離
・スタッフ名のオートコンプリート機能
・「@wiki記法で表示」のウィンドウでも編集可能に
・声の出演を直接入力したとき重複登録しないように
とりあえず点の当たり判定も作ってみました。
当たり判定に使う形状の種類を増やすとその数の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も同様
とりあえず球同士の当たり判定を作りました。
実際の当たり判定とかAABBとかの表示もできますのでデバッグしやすくなると思うのです。
Zバッファを導入して複数オブジェクトを正しい前後関係で描けるようにしようとしたら、予想以上に手間取ってしまいました。
最初に参考にしたプログラムがZバッファのことを考えていないプログラムで、それに対して後からZバッファをつけたのでややこしくなったようです。
あと。地味なところですが、ウィンドウサイズの調整を自動で行うようにもしました。
何はともあれ、やっと当たり判定のプログラムが組み始められそうです。
現在の画面はこんな感じです。
視点とか見る方向とか動かせます。
この辺の視点移動に関していろいろ作っていたので画面自体はあまり面白いものはできていません。
交互で悪いんですが、今日は3Dのほうをやってました。
空間分割について調べたりカメラの移動を考えてみたり。
設定メニューを作っていました。
見ての通り、項目のところに画像も表示できます。
とりあえず当たり判定が表示できなきゃどうにもならないということで、昔トゥーンレンダリングをしたときのことを思い出しながら3D表示を作り始めました。
XNAとかOpenGLとか選択肢はあったけど、結局C++/DirectXで。
VisualC++2008とDirectX9を使っています。
唐突ですがふにゃさんの裏話を更新しました。
温度変化ゾーンの仕様は、見た目と食い違う判定になることが多くてわかりにくいため正直失敗だったと思っているのですが、この仕様でステージがいくつもできている以上、この仕様の変更はありません。
というわけで、その分かりにくい仕様を簡単にですが説明したページを作ったというわけです。
なんだか最近また3Dゲームを作りたい気分になってきて、当たり判定やらなにやら勉強しています。
とりあえず、AABB(矩形の3Dバージョン)、球体、カプセル型(線分から一定距離以内の範囲)の当たり判定の数学的な理解はできてきたつもりです。