Direct3D奮闘記

えー現在Direct3DRMと闘ってます(^。^;


Mar.05

Direct3DRMもだいたい理解できたので、本日をもって終了いたします。
Releaseは必ずやりましょう。

Feb.12

なんか最近、よく分からなくなってきました。
以前からそうだったが、インターフェイスを作成する順番によって違った結果が返ってきたりするんですよ(^^;;
A→B→Cという順番でCreateすると、プログラムが強制終了してしまうのに、B→C→Aという順番にすると正常に動作したりして、困ってます。
これってDirectXのバグなのだろうか?とか思ってしまいますが、COMについてさっぱり理解していないのが原因なのかもしれません。
こういう経験ってないですか?

Feb.11

DirectX5のオフィシャルマニュアルがでましたねぇ。買っちゃいましたよ。
しかし、最近書くことなくなってきました。
ということで、くるまげーよろしく(^^;;

Jan.14

いやぁ、年明けちゃいましたねぇ・・・(^^;;
とりあえず、IMは簡単な実装は出来たので、これでよしとしよう。ま、清3Z本をそっくりそのまま移しただけだったりするが・・・(^^;;
で、いまDirectShowやってたりします。というか、再生はサンプルコードを移してすぐ出来るようになりましたが、リファレンスが英語だったりするもんで、流れとか命令の意味とかが分かりません(T.T)。というわけで、本格的にやるのは日本語のリファレンスが出てからになりそうです。
うーんなんだかんだでDirectXのほとんどを制覇してしまってる。

Dec.26

うー、悪夢のクリスマスも終わってほっと一息。
RMやめてIMやってたりしてます。といってもRM捨てたわけじゃないけど・・・(^^;;
IMだと、HAL使ってりゃ描画中でもCPUが自由に使えるらしくて、とっても便利便利♪
でもRMと同時に使ってるからその恩恵は受けられないっす(TT)
IMやってて思ったが、いまは変換ステージと照明ステージは自前で計算してやらんとあかんけど、これすらも某プレ捨てのようにハードの方でやってくれるようになれば、RMの存在価値がほとんどなくなってしまうのでは・・・・。でも、フレームとかの概念がないのは面倒かも・・・(^^;;

Dec.25

めりーくりすまーす!
と、世間が浮かれている最中、おいらはせっせとプログラミング・・・(TT)

Dec.20

最近、清3Z本読んでて思ったんだが、Direct3DRMのMeshbuilderからXファイルをロードすると、勝手にテクスチャーも読み込んでくれて、なおかつ勝手に張り付けてくれて便利なんだが、よくよく考えてみると不便だったりすることに気づいた。
というのも、どうもいつの間にやらTextureオブジェクトが作成されてて、テクスチャーを読み込んだとたんにそのオブジェクトが開放されてしまっているみたいなのだ。
ということは、テクスチャーに細工をしようとすると、いちいちGetFaceして、GetTextureしなければならなかったりするのだ。(結構めんどいぞ) しかし、そこは天下のゲイツ君であった(笑)
なんと、MeshbuilderのLoadメソッドでテクスチャー読み込むためのコールバック関数が用意されてるじゃぁあーりませんか・・・!
このコールバック関数を用いれば、テクスチャーをロードする度に呼び出されるので、Textureに細工するのが簡単簡単♪
ま、これはすでに実装済みなんだが、問題はその次である。
同じテクスチャーを使用した複数のオブジェクトをロードした時のことを考えてみると、どうやら、1枚のテクスチャーごとに(1種類ではない)ご丁寧にメモリを確保してくれているように感じられてならないのだ。(ここが清3Z本読んでて感じた部分)
もしそうだとしたら、同じテクスチャーがメモリ上にゴロゴロと存在することになるのだ。これはとんでもなく馬鹿である。しかし、実際はどうもそのようだったりする・・・(^^;;
で、こんな無駄な事してられっかー(とちゃぶ台をひっくり返す)・・・てなわけで、まず最初に、必要なテクスチャーを1回ロードして、Textureオブジェクトにしてから、Meshbuilderへのロードで、コールバック関数を呼び出しぃの、Textureオブジェクトを渡しぃの、とやれば、かなりテクスチャー用のメモリが減らせるのではないのだろうか・・・とか思う今日この頃であったりする。
実際減ってるような気もするしぃ・・・・(^^;;

Dec.17

最近、DirectPlayをやってます。実装自体はほぼ終了したんだが、実際にゲーム中で使用するにはまだわからんことが多い。
というのも、データの送受信には、2〜3SYNCくらい待った方がいいらしく、その後に描画してたら4SYNCくらいかかってしまうことになってしまう(^^;;
MOTORACERなんかは、どうやって同期とってるんだろう?
やはりRMからIMに代えないといかんのか・・・?でも今からじゃなぁ・・・・(^^;;
Dec.08

ふぅ、結構Direct3Dって奥が深いっすねぇ・・。
IDirect3DRMMeshBuilder2::Loadの4番目の引数であるD3DRMLOADTEXTURECALLBACKコールバック関数使おうとしたら、肝心のコールバック関数がLPDIRECT3DRMTEXTURE2をサポートしてなくて、IDirect3DRM2::LoadTextureが使えない始末。ヘルプを見ると
HRESULT loadTextures(char *name, void *arg, LPDIRECT3DRMTEXTURE2 *tex)
{
return lpD3DRM2->LoadTexture(name, tex);
}
とか載ってるんだけど、これどうやって使うのか分からなかった・・・・。 で、結局
HRESULT loadTextures(char *name, void *arg, LPDIRECT3DRMTEXTURE *tex)
{
return lpD3DRM2->LoadTexture(name, (LPDIRECT3DRMTEXTURE2*)tex);
}
としたらうまくいった。こんなんでホントにいいのか?

Nov.28

何か一月ぶりの書き込みです。基本的にあんまし進んでないんです(^^;;
今年中に何とかしないとなぁ・・・・
あと、プログレッシブメッシュは、使用できないことが判明してしまった・・・トホホ
ところで、2000HITしたんですけど、1000HITからちょうど1ヶ月なんですよねぇ・・・(^^;;

Oct.29

久しぶりの書き込みである。
相も変わらずマップシステムにはまっている。
話は変わるが、 「Direct3D PROGRAMMING GUIDE BOOK」 なる本を入手した。 (通称 清3Z本)
これはなかなか良い。今まで参考にしていた物といえば、InsideWindowsとCMagazineと、ネットに転がっている英語のコメントがふってあって、よくわからんサンプルソースなどであった。(ASCIIから出ている 「3DグラフィックスプログラミングforWindows95」 というわけわからん本も、一応あるにはあるが・・・・(^^;;)
そして、ついに日本人の日本人による日本人のための日本語のDirect3D本が出たのである。 これからDirect3Dをやろうとしている初心者には、多少ハードルは高いが、それでも初心者にですらお勧めしてしまう内容であった。(というか、これしかないんだけど・・・(^^;;)
これを見て、これからは5だなとか勝手に思いこんで、DirectX3用のコードをDirectX5用のコードに変更してしまった。特に初期化の部分であるが、ちょっと変更・追加するだけで簡単に移行が済んでしまった。(ありがとう清3Z本)
これで、本当にDirectX5専用になってしまったのだ。さぁ、DirectX5を早速入手するべし。といっても、サンプルはまだないっす。トホホ

Oct.15

うーん、まだマップシステムにはまってたりしている。
既存のげぇむでは、どういう手法を用いているのだろうか・・・?
やたらな手法を用いると、セガの特許に引っかかるか?(笑)
これをはよかたづけんと、次にすすめん・・・・(^^;;
ところで次って・・・・何やろ。

Oct.09

四角ポリゴンについて訂正。
どうも、ポリゴンを上から見ると四角形なのだが、横から見ると平面になってなかったのが原因だった。
やはりゲイツ・・・(笑)←特に意味無し

さぁ、お待ちかねの(←え?待ってないって・・・?)
げぇむの企画ですが、レースものです。パチパチパチ
げぇむについては、別の部屋を覗いてみてくらはい。
ここでは引き続き、技術的な(ここって、技術的な話だったのか??)点についての書き込みをしていく予定です。(←誰も見てないって?・・・トホホ)

さて、プログラムの方ですが、マップシステムを大幅に変更しています。というのも、矩形で区切るとプログラムは簡単なのですが、どうも既存のげぇむを見ていると、コースに沿って区切っているようなので、そっちをまねてみることにしました。
でも、全然プログラムが思いつかないよ〜〜〜〜!!!?
よって、サンプルはおあずけです。

Oct.01

うーん、ついに10月に突入!
サンプル公開間近?
結構いい感じです。ククク・・・。
因みに、マップシステムはVer0.3aにバージョンアップしてます。

ポリゴンのあたり判定だが、どうも四角ポリゴンだと放線ベクトルの値が変になってしまい、正しい平面の式が求められなかったのが原因だったようである。しかし何故?
さすがゲイツ(笑)

次回、ついにゲぇムの企画公開!?
やはり飛行機ものか?それとも格闘?それとも・・・・?ニヤリ
Sep.29

三角ポリゴンにしたらあたった・・・・(^^;;

Sep.26

うーん、相変わらず当たらない・・・(^^;;
どうも四角ポリゴンだとうまくあたらないらしい・・・。
なんでじゃぁ〜〜〜!!
恐るべし、空間の魔術・・・。

Sep.25

ポリゴンのあたり判定ルーチンにはまっている(^^;
結構大変だねぇ・・・。

Sep.20

マップシステムVer0.3完成!!
とりあえずサンプル作りました。
著作権は、「チームサンダーバード」に帰属します。
なんか、対戦ゲームみたいに上下に画面が存在してますが、余興でつけてみました。特に意味はありません。同じカメラで見ているので同じ動きします。

マップシステムだが、何が大変かって、最初はフレームを見え無く(DeleteVisual)すればいいのかなぁ・・・なんて安易に考えていたが、フレームが残っている以上ジオメトリ演算やってしまうんで、フレームの再利用をしよう!とか思ったわけだが、その方法がよくわからん。
で、シーンの子供であるフレームを消して(DeleteChild)、改めてフレームを作り直す(CreateFrame)という方法を採ったわけだが、もっと他にいい方法はないのか?
次は、ポリゴン同士のあたり判定か!?


Direct3DRMのサンプル其の参のダウンロード(93KB)
(要DirectX3a)
よろしければ、動作確認のメールを こちら までお願いします。

Sep.18

本格的にDirect3Dに突入することを決意!
この情熱がいつまで続くことやら・・・・・(^^;;
とりあえず今、マップシステムを構築中。
このシステムが実装されれば、めちゃめちゃ広い空間をも自由に動き回れる。
めちゃめちゃ広い空間を作り出す一番簡単な方法は、ワールドに全マップをおいておく方法だが、この方法では、扱うポリゴン数が莫迦みたいに多くなりスピードにめちゃめちゃ影響するのだ!
というわけで、BGの書き換えスクロールよろしく、ポリゴンマップにも書き換えの概念を導入することに決定!パチパチパチ
要は、ソフトウェアのレベルでジオメトリ演算の前に、カメラに入らない部分のオブジェクトを取り除いて、CPUの負担を少なくしよう!ってな感じです。
どんなんかというと、セガサターンのレースゲームによく見られる、奥の地形がにょきにょき現れるというやつです。
しかし、云うは簡単、作るは難しなんですねぇ・・・・。どないしよ・・・(^^;;

Sep.13

久しぶりにDirect3Dに触った・・・・。
またまた、サンプル作ってみたんで見てください。
飛行機をカメラが追っていってるようですが、とりあえず、カメラオブジェクトを飛行機オブジェクトの子供にしてしまってます。
↑すんげぇ手抜き(^_^;;
おかげで、飛行機の動きが変に見える。

尚、サンプルの著作権はあいかわらず「チームサンダーバード」に帰属します。作者に無断での転載やプログラムの一部または全部とオブジェクトデータの使用等は行わないでください。
また、本プログラムを実行した際に生じる、いかなる問題等に関して、作者は一切の責任を負いません。(たぶん問題なんかおこらんだろうけど・・・(^^;)
よろしければ、動作確認のメールを こちら までお願いします。

Direct3DRMのサンプル其の弐のダウンロード(87KB)
(要DirectX3a)

Sep.11

DirectSoundの実装に成功!
って、もうだいぶ前に出来てたんですけど・・・・。
これで効果音もばっちし♪
しかし、3Dはどーなってんねん(^_^;;
なんか、Direct3D以外のことばっか書いてるし・・・・。

Aug.31

DirectDraw(BG)の融合に成功!
今までは、tick関数を使用していてうまくいかなかった。
bltしてtickすると抜けないスプライト?のようにポリゴンが表示される。
これを以下の手順にかえることで解決!
大沢大しぇんしぇいありがとう(笑)
scene->Move()
viewport->Clear()
surface->blt()
viewport->Render()
D3DRMdevice->Update()
これにより、抜けるスプライトのようにポリゴンが表示される。
bltをUpdateの後におこない、カラーキーで抜け色を指定すれば、スプライトにも出来る。
やったー。
これでまた一歩野望に近づいた(笑)
↑ホントかおい
え?スポットライト?それは聞かないで(T.T)

Aug.20

スポット光源がうまく出来ん!!
なんでじゃぁぁぁぁ??
モノランプモードだと出来るのに、RGBモードだと出来へん!!

Jul.29

最近、Direct3Dにさわってない・・・。
というのも、DirectDrawを使用した次回作に取りかかっているからである。
一応、Direct3D関係のHPをあさってはいるのだが・・・・。
とりあえず、新規げぇむが出来次第また始めようかなぁとか思っている。
というかやる。
以上

Jul.25

とりあえず、サンプル作ってみたんで見てください。
尚、サンプルの著作権は「チームサンダーバード」に帰属します。作者に無断での転載やプログラムの一部または全部とオブジェクトデータの使用等は行わないでください。
また、本プログラムを実行した際に生じる、いかなる問題等に関して、作者は一切の責任を負いません。(たぶん問題なんかおこらんだろうけど・・・(^^;)
よろしければ、動作確認のメールを こちら までお願いします。

Direct3DRMのサンプルのダウンロード(115KB)
(要DirectX3a)

Jul.23

Direct3Dでげぇむを作ろう!とか思ってたりするんだが、いったい何を作ろうか・・・。
最初から難しいのは作れんしのぉ・・・。やはり最初は、2Dのげぇむをポリゴンで表現!というのが妥当なのだろうか・・・・。
しかしあれだな・・・。3Dの知識もないくせに3Dやろうとしてるんだから世話がないっす(T.T)
DirectXのオフィシャルマニュアル見ても、分からんことだらけだし・・・(^^;;
それでも、何とかポリゴン表示できてしまうあたりが、DirectXのすごいとこなのか?
いや、しかし、ポリゴン表示するだけじゃ、げぇむになんないしなぁ・・・・(;_;)

Jul.18

Direct3DRMですが、初期化が大変ですねぇ・・・(^^;;
ドライバの列挙とか、最初何のことやら分かりませんでしたよ(;_;)
サンプルコードとかもあまり転がってないし、書籍もあまりないし・・・
CMagazineの7月号からDirect3Dの連載が始まったが、とりあえず自宅のマシンでは動かないし・・・(T.T)
さらに問題なのが、オブジェクトデータがない・・・(T.T)2
Xファイル、今解析してますが、テクスチャのデータがファイルの中に紛れ込んでたりして、何のこっちゃ?ってな感じでやってます。
あと、3D描くツールがないってのも(T.T)ですねぇ。一応六角大王使って、コンバータ通してXファイルにしてますけど。
とりあえず、画面にポリゴン出すことは出来るようになったが、これをいかにしてげぇむにまでもってくかが問題だったりする(^^;


戻る

ご意見ご感想は ende@interlink.or.jp までお願いします。

Copyright(C)1997-1998 TamTam
最終更新日 1998.Mar.05