「DirectX」に関する日記

次>

funyak

SharpDX検討中。
…だったのですが、スマホで初期化に失敗しました。
SharpDXはUWP(Windows10限定)とWFP(7あたりでも使える)の両方に適用できそうだったのでいいかと思っていたのですが、案外うまくいかないものですね。
まあ、DuoCodeを使ったブラウザ版だとそもそもDirectXからして使えないので描画周りの使いまわしはそもそも完全にはできない前提だったのですが。

funyak

描画のパフォーマンス計測中。
Windows FormsのGDI+はちょっと使えない感じ。
UWPはWin2Dのおかげでまあまあいい感じ。
WPFは愚直にRectangle置きまくっているけど速度だけでいうと悪くないかも。
とりあえず、WPF版の速度計測プログラムを置いておきます。
等倍表示板
縮小表示版(表示画像数4倍)
拡大表示版(表示画像数4分の1)
白いのをくるくる回しながら描画速度を測定するプログラムです。
左上の数値を教えてくれると嬉しいです。

無題

新しいパソコンセットアップ中です。
Windows7が32bit版と64bit版の両方インストールできそうだったのでデュアルブートで両方入れてみることにしました。
まあ、手違いで3つ入れてしまったのですが。
ともかく、これでテスト環境を増やせたり、64bitで動かないものを32bitで動かしたりできそうです。
あと、機会があれば更にLinux系の何かも入れてみようかなと思っていたり。

無題

ふにゃさんについて、BGMは引き続きDirectMusicにしようと思っていたのですが、どうにもWindowsVista/7の64bit版では既にサポートされていないそうです。
64bitがそれなりに広まってきている昨今、64bit版には対応させませんなんていうのは通用しないし、たぶん将来の私が憂き目を見ます。
64bit版Windowsに対応しているかどうか分かりませんが、Timidityというのはどうでしょう。
演奏データをリアルタイムにいじりたいので自力でカスタマイズしてコンパイルする作業が必要になりそうですが。
グラフィックについてはサウンド以上にいろいろなライブラリが転がっているのでまああまり問題はないでしょう。
フルスクリーンについては枠なし最前面最大化でなんとかしようかと思っています。

無題

ふにゃさんをどのOSに対応させるか決めるため、調査しました。
結果、今年に入ってから今朝までの統計で以下のようになりました。

Windows XP:1950
Windows 7:1545
Windows Vista:989
Windows 2000:72
Windows 98:48
Windows XP(64bit):14

私の使っているVistaが少なすぎて泣けてきます。
XPのシェアがいまだにかなり高いというのも驚きですが、逆に考えると、既に半分以上がDirectX10を使えるVista以上のバージョンとも言えます。
Direct2DとかDirectWriteにも結構興味があったりするのでどっちに対応させるべきか…。
少なくとも、XPとVista用を別々に実装することはないと思います。相当骨が折れるので…。

無題

NeoMuplの再生DLLをいじっていました。
DirectShowの実装なんですが、バッファの設定をどうすればいいのかよくわからんです。
そもそも今時DirectMusicとDirectShowの組み合わせってどうなんだろう。

無題

NeoMuplのDLL、DirectMusicの基本的な再生と状態取得は出来上がりました。
テンポ変更なども作ったほうがよさそうな気がしますが、最近は私自身テンポ変更を使っていないので優先順位は低めです。
マスターテンポを使ってDirectMusicに丸投げするかツールを使ってテンポ変更イベントを自前で差し替えるかという選択肢もありますし。
ちょっとデバッグ用のプログラムとリンクするための設定がいろいろ食い違っていたのでそのあたりも直しました。
さて、DirectShowのプログラミングを忘れてしまいました。
現在はDirectShowでの再生の方が重要なのでこちらも急いで実装したいものです。

無題

NeoMuplDLL作成中。
とりあえずまずは再生状態を取得できるようにしています。

無題

NeoMuplのDLL作ってました。
DirectMusicはとりあえず再生はできるようになりました。再生状態の取得がまだできない状態ですが。
まあ、再生状態の取得は以前にもやっていたことなのでたいした負担ではなかろうと思います。
で、NeoMuplの本体を使ってテストするのはやっぱりテストの自由度に制約が出るので、テスト専用のプログラムを作成しました。
DLLに渡すパラメータを設定するだけの簡素なもので、テストプログラムのほうでは例外処理なんかは一切行っていません。
そして、DirectShowとストリーミング再生の仕組みもだんだん分かってきたので、そろそろDirectShowの再生にも着手できそうです。
多分DirectMusicとDirectShowの間でDirectSoundを共有すればエラーで落ちるなんてことはなくなくはず…。確証はないけど。
あと、従来のNeoMuplはDirectShowでの再生ではループ位置の設定が非常にいい加減でまともなループ再生ができなかったので、今度はサンプル単位で精密なループ処理ができるようにしようと考えています。実現可能かはまだ未知数ですが。

無題

アンパンマンDBの検索内容の表示を作ってました。
なんだかXSSの問題もあったようで、そのあたりの修正も。

リンク集に「マルペケつくろーどっとコム」を追加しました。
DirectX関連では参考にしています。
「完全ホワイトボックスなスキンメッシュアニメーションの解説」が良かったです。

無題

NeoMuplのDLL作ってました。
DirectMusicPerformanceの初期化なんですが、IDirectMusic8のインターフェースポインタを取得するのがやや面倒なようです。

無題

点と線分の距離により判定される当たり判定は一通り実装し終えました。
このあたりは似たようなプログラムになるので、ヘルパー関数を作って、内部的にそれを呼び出すことで当たり判定を行っています。
点と線分の距離の計算方法には内積を使う方法とが遺跡を使う方法があり、どちらが速いのかは分かりませんが、とりあえず内積を使うほうにしておきました。
この方法は次元によらず有効なのがいいですね。

無題

当たり判定のほうは進んでいませんが、当たり判定とその境界ボックスの描画は一通りできるようになりました。
そうそう、異なる内容の当たり判定でも同じルーチンを使いまわすことが多いので、そのあたりをまとめたりもしていました。

無題

昨日作ったカプセルの表示を当たり判定の方に組み込みました。
当たり判定自体はまだできていなくて、呼び出すと無限ループに突入してしまいますが。

無題

IE8を入れました。
早い早いとMSさんは言ってますがまずサーバーの応答が遅いのでどうにもなりません。
他のブラウザも速さを自慢しているようですが、逆に言ってそういうブラウザが必要なほど重いサイトが多いというのがどうにかならんのかなーって思います。

ちょっとカプセル型を描画する関数を作ってみました。
メッシュを作る方法が良く分からなかったので、ひとまず座標を指定して直接描画する関数にしてみました。
カプセル座標における単位ベクトルの作成で座標が左手座標系から右手座標系に変わってしまってカプセルが裏返ったり、インデックスがずれて穴が開いたりもしましたが、何とかうまく表示できるようになりました。
もうちょっと体裁を整えたらプログラミングのページにまたアップしたいと思います。

1242397309.png

無題

D3DXCreateSphereに近い関数を自作しなければならない状況ができたので、お手本となるD3DXCreateSphereについてまず調べてみました。
で、調べた結果をアップしてみました。
ここんとこ自分のことばっかりで更新が滞っているのでいい機会です。

無題

どうやら、D3DXCreate~系の関数はメッシュの作成時にD3DPOOL_MANAGEDのオプションをつけて、デバイスのロスト時に備えてコピーをとるようにしているため、メモリ使用量が増え続けるようです。
でもReleaseしてどこからも参照されなくなったオブジェクトでもコピーって必要なんでしょうか…。
ためしにほっといたらコピーがたまり続けて何百MBにもなってたし…。

無題

なんだか今日は妙にDirect3Dが重くて、調べてみたところ、なぜだか秒間30KBぐらいずつメモリ使用量が増えていっている模様です。
しかもなぜかライブラリ関数のDrawSubsetで。
メッシュのポリゴン数を増やしたら最初は勢いよくメモリを消費するけど最終的には元のペースに落ち着くし、DrawSubsetを複数回呼び出すとその分メモリ使用量が増えます。
動作が重いほうはどうにもBeginSceneとEndSceneだけでなるようだし…。

ふにゃさんのほうは、項目選択系の設定変更ができるようになりました。
ただ、設定変更したときに特別の処理を要するもの(BGMなど)に関してはまだ対応できていません。
あと、BGMに関しては、元々あったBGM変更ボタンは無効にして、設定でのみ変更可能にしようと思います。

無題

とりあえず点の当たり判定も作ってみました。
当たり判定に使う形状の種類を増やすとその数の2乗に比例して処理が多くなってくるので最低限の当たり判定でやっていきたいところですね。

次>