Iもっさりのんびりと音周りの話を書いてます。プログラミングメモ2008年07月12日フイタ今諸事情で入力事務系のバイトをやっているんだが...どうにもそのバイト先のExcelVBAのプログラムがひどい。いや、こないだちろっとデバグ中のを見たんだけどSelectCaseのCaseだけで40行くらい埋まってた...高校くらいの時に友達が書いてたプログラム思い出したよ...多分あれ入力データ形式の分岐だと思うんだが、正直配列使うなり作業用シート使うなりしろよとか思った、バグるよ?面倒くさいよ?とも言わずぼーっと入力ができればいいのです。やばい、遅い(苦笑)初めて書く文字が40字程度あると一瞬かっくりいく。変化する文字列、つまりメッセージの表示の時にどの程度つまるか試してみないと分からないけどねぇ...一度描画した文字列ならば速いです、当然だけれどえらい速い。アクションゲームならあれだね、画像で全部用意したらいいと思う。文字列を大量に扱うRPGとかノベルゲームではどうなんだろう?画面全体に文字を使っても数百字...でも一気に表示するのは重そうな気がする。こんな感じで一文字ずつ描画すればいいんではないだろうか。codeはUINT型の文字コード、x,y,color,sizeは文字の座標・色・大きさ。FindDrawChar(char*)を作るところか。実行速度がどれくらい出るかは不明、作ってみて試してみないとなぁ。後、一文字描画クラスが登録数を超えた時の挙動が問題。古い順に消すか優先順位をつけて消すか。スキル的に前者を取るわけだが。文字列表示が思いのほか難しい。Wold!をやるわけだが、ゲームプログラムだと意外にこれが難しい;;;DirectXに用意されている文字列描画用にID3DXFontを使えば、実装は楽なんだが。これを使うと毎回裏で文字をガリガリ1ドットずつ書くらしく遅い。したら自分で上手いこと毎回書かないですむようなプログラムを書こうと思うわけだ。結局のところ文字一個を表示するプログラムは作れた。面倒くさかったのにさらに面倒くさい。作ってしまえば後は楽になるんだけどねぇ...今のところ出来上がったプログラムは「a」の文字がひたすら移動するだけ。|入力処理系統を実装。ジョイスティック一本にキーボードからの入力を受け付けられるように。静的にボタンを配置しているのでボタンの設定変更は不可能。キーボードの配置は静的でも困らんがジョイスティックは困るかも??今後拡張する方向で、とか言ってるとやらないわけだが。ボタンの数が少ないのをいいことにswitch-caseで誤魔化した。ソースが綺麗じゃないのが気になるんだよなぁ...下ボタンは矢印下とテンキー2とパッドの下ボタンって関連付けとかをどうにか綺麗に処理できないものか。今の処理は適当すぎる...https://www.microsoft.com/japan/msdn/directx/techart/Directinputmapper.aspxというわけで探してみたわけだがここいら辺りでいいのかな?なんかあんまりアクションマッピングでどーこーって話を見ないんだよなぁ。ものっすっげーーライブラリを書くわけじゃないからいいか。気が向いたらやると言う名の完全放置。あ、ついでに探しててこんなの見つけた。|2007年09月11日スキンメッシュ実装しました。いうわけで3Dゲームの下地が出来ましたよ、と。結局本を買ったわけですよ、一冊。ネットだけじゃちょっと無理でした、気合の面で。ところでこの本、メモリの開放漏れが酷いんですが。自分のプログラムが3箇所くらいメモリリークしててうぇーとか思ったらサンプルだと軽く20箇所以上メモリリークしてるでやんの。朝飯食ってコード見直してたらメモリリーク発見。不必要なところで参照カウンタを一つ増やしてましたよと。言うかマジサンプルありえない。いうところに力を入れていないとは言え大き目のモデルを読み込むとプログラム実行ごとに1MB弱のメモリリークとかね。複数のファイルを読み込んだら一体どうなるのかと。挫折、理解できません。プログラム上での最低限の使い方は理解した。虚数単位の拡張版らしく、クォータニアンとはq=s+tI+uJ+vK(s,t,u,vは実数)orq=<s;V>(sは実数、Vは三次元の位置ベクトル)で定義される数らしい。この時I*I=J*J=K*K=I*J*K=-1とする。三種類の虚数単位と実数で表されたこの数は四元数とも呼ばれる。これにしっかり則って計算すると一定の法則でもって掛け算が定義できます。詳しい説明が全くもって意味不明だったのだが最終的にこう定義すると点の任意の軸周りの回転を簡単に表現できるらしい。ある点Pをrに関してθ回転させる式はP=<0;Vector(P)>,Q=<cos(θ/2);sin(θ/2)Vector(r)>,Q*=<cos(θ/2);-sin(θ/2)Vector(r)>として、P'=QPQ*で表せる、これならPCで計算させるのも楽ちんですね。二つに分ける理由はあまりちゃんと理解できなかった。ハミルトンさん(?)が考えたらしいんですがよくもまぁ...ガウス平面を三次元に拡張できたら嬉しいのにと思いはしたがよくよく見つけたものですね、すげーー。いや、何が嬉しいかっていうと一定の計算法則でもって複雑な移動処理を実装できるのがすばらしいと思うわけです。ポイントは回転と拡大と位置が同じ『数』で表せるところにあるんだとか。理屈はよくわからんのだけどね。回転だけは使えるようにしておいたのでいいかなぁと。応用するとキャラクターの姿勢制御が楽チンみたいです。一回作っちゃえば別に数学の中身なんて理解しなくてもいいんだけどさ。逃避行なプログラム感情が停滞するとにわかに理性が活発になるのでプログラム中です。数日かけてようやっとグラフィック、インプットとオーディオの基礎完成。今回はしっかりと基礎を作っているので流用可能な形に。他人の作ったライブラリを使ってもよかったんだけれどもそれは意地。作るなら自分で一から作ったほうがどうせ個人用なら使いやすいし。作ったら3Dシューティングっぽいものでも作ります。言っても多分描画の部分で一月くらいかかるんだろうがorz気長に行きます、毎年少しずつレベルアップ中です、年単位なんです。クォータニアンから勉強します。プログラムのバグ取りに約4時間ほどフォーラムを周りまくって疲れた。本場の英語サイトはよく分からん表現が多い、音楽系よりマシだけど。VisualStudioが6→7,8になった時に仕様変更が多々あったらしい。例外とかWCharとか、面倒くせ。楽をする前に組む作業がえらい大変、しかもソース汚い...見づらい...やってしまえば後は楽なんだけどいきなりやることが難しすぎたか。概念は頭にまぁ入ったけど計算がうまくいかない数学の問題みたい。概念すらも分かりづらいからやってられない...3、4回組めば慣れちゃうんだけどなぁ〜、一回目は何にしろ。数学の問題と同じだなぁ、すべからく。|2007年03月06日ポイントは最新版というわけでただいまDirectX9.0cSDK(August,2006)にてプログラムを書いているわけなんですが...このDirectXっていうのはWindowsのある種一部分なんですが、まぁWindowsのゲームの基礎部分なわけですよ。これに問題がありまして...マイナーバージョンアップが多すぎて話にならない!月ごとにバージョンアップされるわ、アップデートして作ったゲームは当然古いバージョンのDirectXしか入ってないPCじゃ動かないわ...そもそも折角Windowsの一部にしたんだからXPのServicePack2を普通に入れたPCでも動かないとおかしいんですよ、戦略的に。大体がDirectX9.0cなんて2004年に出たバージョンじゃないか!なんでFebruary,2007とかわけのわかんないことしてるんだよー。9.0dとかにすればいいじゃないかーーーー。月ごとのアップデートのせいでDirectXが常に最新じゃないとプログラムが動かない罠。プログラマはいいかもしれないがネット配信を考えるとインストール時についでにDirectXの最新版も入れないといけない。なるとサイズが自動的に30MBくらい増える、話にならん。SP2で動かすためにまさかダウンデートするとは思わなかったよ。|アクセス違反PCを使ってると何気なしにページ違反やらアクセス違反やらが発生します。Win98の時は特に酷かった...予告も無く落ちるんだから洒落にならん。プログラム書いてると明日は我が身なわけで...今書いてるプログラムが終了時にやたらとアクセス違反を発生させる。そりゃぁもう100%の確率でってそれは俺がプログラムをミスしてるんだって。思ってチェックしてみた。OutputDebugStringが便利、挿入してエラーを探ったら案の定というか、DirectAudioの解放処理の部分でエラーがでているくさい。結局解放処理の順番が間違ってたせいで落ちまくってたですよ、と。プログラムやってると全ての世界を画面の中で構築することが出来る。出来るけれども当然構築されていない要素は存在しない。三次元画像から二次元画像への投射。物質界では人間の目やカメラと言う呼称のつく機械を使えば光を媒体にして一瞬のうちに二次元へ投射することができる。物質を兼ね備えているわけではない。画面の中のカメラとは三次元座標から二次元座標への変換行列でしかない。そこには光も、その反射、レンズによるピントの調節もない。物質界では当たり前のようにピントのずれが生じ、その結果二次元へ投射された射影は所謂『ボケ』が生まれる。画面の中では物質が無い以上全てデジタルな計算を使っている。機械はデータの持つ意味を理解できない。そこにあるデータを定められた計算手順によりデータを吐き出す。これ以上のことはしない。彼らはそのデータが座標と言うことすら理解できない。物質界のシミュレーションということなど理解できるべくもない。従って表示されるデータはあくまでも計算に則った結果である。カメラが単純な二次元への変換行列である以上『ボケ』ない。人間が手前勝手に自ら認識しうる世界を画面の中に押し込めている以上、それは当然やむを得ない結果だろう。rzところでDirectGraphicsは画面を占有するけどDirectAudioはオーディオデバイスを占有しないんだねぇ...MediaPlayerと共存できるので音楽聴きながらプログラムをガリガリ。必要な機能をそろえるために何か一個ゲーム書くか...STGとかは完成度低くてよければ凄く簡単なんだよなぁ〜。アクションパズルも作りやすい...個人的な好き嫌いか?一応共通点としては操作性があまりとっぴなものが無いから作りやすいと思ってる。詰めていけば難しいのは当たり前なんだが...しかし残念ながらどちらも滅多にやらないから作りづらい。|2007年03月02日プログラミングメモDirect3DDeviceの消失処理が面倒。{if(g_lpD3DDevice->TestCooperativeLevel()!=D3DERR_DEVICELOST){g_lpD3DDevice->Reset();}---で何とかなりげ、これだとあかんことあるんかなぁー?まぁさしあたってコレしか思いつかなかったんだが。SwapChain由来のオブジェクトがあってもResetの部分で何とかできるハズ。Aカテゴリ日記(197)打ち込み(33)プログラミングメモ(15)完成した曲(18)音声合成(11)作曲(123)合唱(7)音楽全般(20)v.Connect(5)過去ログ2010年12月(2)2010年10月(3)2010年09月(1)2010年05月(3)2010年04月(4)2010年03月(7)2010年02月(1)2010年01月(1)2009年12月(2)2009年11月(2)2009年10月(7)2009年09月(11)2009年05月(1)2009年04月(2)2009年03月(2)2009年02月(1)2009年01月(1)2008年12月(3)2008年11月(2)2008年10月(10)Seesaaブログ×この広告は180日以上新しい記事の投稿がないブログに表示されております。