C#でDirectX9 初心者の館
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGGDIと違ってドキュメントも難解で何をすれば描画できるのかさっぱりさっぱりなライブラリです。
その上知っている人はレベルが高すぎて聞いても宇宙語でしす(泣
そんなDirectX9を将来に備えて勉強してみようというスレです。
Microsoftの掲示板
http://www.gdncom.jp/general/bbs/ShowForum.aspx?ForumID=29
SDKをダウンロードできるところ
http://www.microsoft.com/japan/msdn/directx/downloads.asp#CDasp#CD
0108デフォルトの名無しさん
NGNG交換と上書きコピー
0109デフォルトの名無しさん
NGNGD3DSWAPEFFECT_FLIP = バッファ交換
D3DSWAPEFFECT_COPY = 上書き
D3DSWAPEFFECT_DISCARD = これは何?
0110デフォルトの名無しさん
NGNGドライバに任せる
0111デフォルトの名無しさん
NGNG0112デフォルトの名無しさん
NGNGSwapEffect.Discardのとき250のfpsが
なぜかSwapEffect.CopyにするとFpsが200になる??
読んでもあんまわかんなかったけど予想はつく、
Discardだとバックバッファの情報はPresent()した瞬間に消えて再利用ができない。
Copyの場合バックバッファを二つ作ってPresent()した後コピーするからバックバッファを利用できる。
しかしメモリ効率が悪い。
たぶんCopyはマルチパスレンダリングや2分割画面を使うのに有効だと思う。。。
0113デフォルトの名無しさん
NGNG>ちゃうちゃう、この場合すでにFormクラスにループが仕込んであってイベントがあったら
>それに対応したメソッドを呼ぶんよ。
その仕込んであるループってどういう形なんだろうか?
その部分がメソッド化しててオーバーライド可能であればWin32APIのような
メッセージループができるわけだが・・・
0114デフォルトの名無しさん
NGNG0115113
NGNGなるほど!ありがとうございました。そのまんまWndProc()だったんですか!
C#で何も操作していなくても画面が進行していく処理が知りたかったのですが
これならタイマやスレッドを使うより高速で安定してますね。
近いうちにC#とDirectXで何か作ろうと思ってた所でとても助かりました。
0117デフォルトの名無しさん
NGNGその記事はDirectX初心者用ではないよ。
だってソースも間違ってるから、それに気づかないとダメっぽいw
それと、その程度で行き詰ってるようでは先は無いな。
諦めろw
0118デフォルトの名無しさん
NGNGおまえはよほどいいゲームを作れたんだな?
作品見せてみろよ
初心者用の板で吼えてるんじゃねーよ
子ね
0119デフォルトの名無しさん
NGNGアフォ、DoEventは動作が不安定になる(数秒間とまったりする)ってManaged DirectXの
作者自らが公言しているだろ。
きちんとApprication.run(form)して >>114みたいにプロシージャでループ作れよ。
ttp://blogs.msdn.com/tmiller/archive/2003/11/07/57524.aspx
0120デフォルトの名無しさん
NGNG>>90 ×
>>60 ○
0121デフォルトの名無しさん
NGNGいつまでたっても
ほとんどでなさすぎだなぁ。
0122デフォルトの名無しさん
NGNG0123デフォルトの名無しさん
NGNG0124デフォルトの名無しさん
NGNGDirectXベースの.NETFrameworkは作らないのかよ!?
0125デフォルトの名無しさん
NGNG0126デフォルトの名無しさん
NGNGけたたましくステキなヨカン
だが、逆に使いにくくなるような気がしなくもない予感
>122
?
0127デフォルトの名無しさん
NGNG本のほうも、あまり多くないし、ヘルプは 更新されていないし間違い多いし。
>>117
ソース間違っているの?まだ日ソフのサイトから ソースだけ落として
VC#のプロジェクトに変換しただけで 中身見て無いけど。
実行はできたけど。
0128デフォルトの名無しさん
NGNG俺は>>117しゃないけど多分、サンプルの方。
Direct3D.Fontクラスの第一引数がnullになってる。
ここってstringでしょ?
0129デフォルトの名無しさん
NGNG7月号特集7「C♯とDirectXで3Dゲーム作りに挑戦!」の106ページリスト4font.DrawTextの第一引数のこと?
あと、サイトから落とせるt70407.zipのD3DSampleフォルダのWinForm.csと
SpaceSimフォルダのGamePlay.csにあるfont.DrawTextの第一引数もnullになってるね?
C♯Builderではこれでいいの?
VC♯だとnullを消さないと「引数が多い」等のエラーでコンパイルできなかった。
Microsoft.DirectX.Direct3D.FontのDrawTextメソッドのシグネチャは2種類あって
どちらも第一引数はstringなんですね。
私は先月C♯は始めたばかりなのでよく分かりませんが、他の方で修正無しでコンパイルできた方はいるのでしょうか?
ソースファイル自体は貴重な情報源なので重宝してますが。
0130デフォルトの名無しさん
NGNG外出だろうけど
コンパイルできない理由は多分、参照しているDirect3Dアセンブリのバージョンが違うからじゃねーの?
ここ読んでみろ。
http://www.dwahan.net/nyaruru/getreadyformdx/
DirectX9.0bのDirect3Dアセンブリのバージョンは1.0.900.0
DirectX9.0 UPDATE SUMMER 2003のDirect3Dアセンブリのバージョンは1.0.1901.0
日経のそのソースは後者のDirectX9.0 UPDATE Summer 2003で組まれているから1.0.1901.0の方を参照するべし!
もしDirectX9.0bのみがインストールされてたらコンパイルできねーよ。
ランタイムの方にもバージョンの違いで動かない等、問題がおきているよね。
0131デフォルトの名無しさん
NGNGメインループさえまともに起こせない現段階のC#+ManagedDXに力注ぐのは無駄。
もう一度言う。LongHone出るまではキッパリあきらめて、Javaゲーム製作の練しとけ。
0132デフォルトの名無しさん
NGNGどうやって配布すりゃいいのか悩む。
.NET Framework再配布パッケージをCDに入れるのも、なんだかトラブルの元になりそう。
Javaで作っても同じだけどね。
ネット配布の場合はMSのページにリンクでも張っとじゃなんとかなるかもしれんけど、
CD媒体のアプリではC#は避けるべきなんだろうか…
0133デフォルトの名無しさん
NGNG0134デフォルトの名無しさん
NGNGソースコードを吐き出してくれるモノってあるの?
板違いかもしれんが・・・
0136デフォルトの名無しさん
NGNGJavaじゃろくなゲームできないだろうに。
現行の市販3Dゲームと同じような
クオリティのものなんてみたことないぞ。
Java3Dってパフォーマンスよくないっしょ。
0137デフォルトの名無しさん
NGNG>メインループさえまともに起こせない現段階のC#+ManagedDXに力注ぐのは無駄。
それはつまりスレッドをまともに扱えない無能者であることの宣言ですか?
0138デフォルトの名無しさん
NGNG単にDoEventの行だけ削除するんじゃダメなん?
0139138
NGNGダメに決まってるよな スマソ
014054
NGNGいまやってみてるけど、巧く行かない…。
113さんは巧く行ったのだろうか。
0141デフォルトの名無しさん
NGNG.NET系はソースレベルで逆コンパイルできるから
EXE配布==ソース公開 と思ったほうがいいぞ。
せっかくC#にもなれてC#まんせーって感じだったのに
まともなリバースエンジニアリング対策ができない事がわかってやる気なくした。
難読化ぐらいはできるがデバッグ情報付で再コンパイルできるんだぞ
署名機能とかあるけど間単にはずせる。
ようはオープンソース派以外は.NET系は使わないほうがいい。
もしくはMSにどうにかしろとメールだすなりして対策されるまで使わないか、
せめて誰かエロい人が.NetFrameworkのコール隠すツールが作られて公開されるまで.NET系は使わない方がいい。
0142132
NGNG単純に、インストーラを2つ立ち上げなければならないってだけで、
ユーザは十分混乱すると思われ。
…と思ったんだが、さっきぐぐってみたら.NET再配布パッケージをインストーラに
ふくめることができるツールがあるとか。
ただし英語版のみで日本語環境ではそのままでは動かないらしいが。
http://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=1509
それじゃ配布に関しても特に問題はないのか…俺のC#Builderで
こいつが動くかどうか不安だが。
0143デフォルトの名無しさん
NGNGそんなのはどの環境で作ったって同じでしょ。程度の問題で。
0144デフォルトの名無しさん
NGNG何故スレッドを使うという選択肢が存在しないのですか?
0145デフォルトの名無しさん
NGNG程度っていうけど普通のEXEの逆アセンブルレベルじゃないぞ
普通のEXEならC++のクラスレベルで逆コンパイルは出来ない。(少なくとも漏れのしるかぎりでは)
.NET系の場合は綺麗に逆コンパイルできるから
EXEから一部のクラスをそのままぱくる事が可能。
しかもILレベルで逆コンパイルとじゃなくC#の言語レベルで逆コンパイルできる。
0146デフォルトの名無しさん
NGNGやたらソース見せたくないと思ってるやついるよな。
0147デフォルトの名無しさん
NGNG0148デフォルトの名無しさん
NGNG0149デフォルトの名無しさん
NGNGどうでも良いヤツ(糞ソースとか、ブス女とか)ほど隠したがるのは
どの世界でも共通なんだなw
0150デフォルトの名無しさん
NGNGなんにしても、ソースまる分かりな.NETを商用で使えるかってなると使えないだろ?
ソースが綺麗とか価値があるないとかは関係ないぞ
0151デフォルトの名無しさん
NGNG0152デフォルトの名無しさん
NGNG同人ゲーで一儲けしようと思ってるんだよ。
相手にすんな。
0153デフォルトの名無しさん
NGNGネットゲームでプロトコルがバレたらまずいなどの理由ならわかるが
商用全般を指しているようだ
>ソースが綺麗とか価値があるないとかは関係ないぞ
と書いてあるので技術流出も関係なさそうだ
いまいち想定している危険が想像できない
0154デフォルトの名無しさん
NGNG015554
NGNGスレッドを使うという話になってなかったから。
いま仕方ないのでスレッドでやってます。
でもWndProcで出来ないというのもイヤですよね?
せっかく聞いたのに。
0156デフォルトの名無しさん
NGNG何かしらのメッセージが発生した時に来る。
つまり、PeekMessageの中って事になるわけで…。
それだったらループには組み込めないんだけど、
WinProcで回してる人はどうやってやってるんだろう?
それよりも実際にいるの?
0157デフォルトの名無しさん
NGNGControlクラス上のイベントハンドラの定義されていないようなメッセージの場合は
Win32APIの時と同じようにswitch,case文で自前でメッセージ処理を行えばいい。
ドキュメントのControl.WndProcの欄を見ればやり方が書いてある。
てか普通、気にしなくてもいいと思う。
>>140
その中でループを組んじゃダメ。
WndProgメソッド自体をループだと思えばいい(毎フレーム呼ばれる、と思う)
アプリの初期化処理はApprication.run()以前に済ませておくか、formのコンストラクタ内でやる。
描画に関してはOnPaintをオーバーライドしてDevice.Begin()〜end()を含んだRander()なりを入れればOK。
This.invalidate()メソッドをオーバーライドしたWndProc()の最後に入れてやると、
実行後ほおっておいても再描画を繰り返してくれる。
チョット分かりにくい説明ですまんが
0159157
NGNGSummer2004版ではおそらくDoEventの改善は行われるはずだから
リリースまで待ってみるのもいい。
0160157
NGNGprotected override void WndProc(ref Message m)
{
switch(m.Msg) { // メッセージ処理
case 0xxxx:
break;
}
Game.mapDraw(); // マップ処理
Game.characterDraw(); // キャラクタ処理
Game.padInput(); //入力処理
base.WndProc(ref m); // 親クラスにもメッセージを送る(必須)
this.Invalidate(); // 画面の更新(OnPaint()を呼んで再描画する)
}
0161デフォルトの名無しさん
NGNG理由と必要性がさっぱり分からない。
0162デフォルトの名無しさん
NGNG必要に応じて別スレッドからSendMessageでユーザーメッセージを処理させればいいだけだし。
何故イベントリブンを無意味にするような方法を使おうとするのだろう?
0163デフォルトの名無しさん
NGNG016454
NGNGそのソースを見る限り「Invalidate」のおかげで
WndProcに戻ってきてるのでは……。
だったらそもそもOnPaintの中に書けばいいんじゃないかな。
0165デフォルトの名無しさん
NGNGウインドウの反応速度が落ちて重く感じることになるという。
0167デフォルトの名無しさん
NGNG他のスレッドが重い処理をするととたんに回ってこなくなるはで、さあ大変。
0168デフォルトの名無しさん
NGNGスレッドはアクションゲームには向かないし初心者には同期とるのもね。デッドロックかかちゃいそう。
>>140
この答えはいろいろあるとおもいますが
>>60の最後に書いてるけど
// Windowsメッセージを処理します。
Application.DoEvents();
をつけたせばウインドウズのメッセージを処理できるー>無限ループにならない。
僕はWinProcやOnPaintはつかってないねぇ。
0169デフォルトの名無しさん
NGNGあなたがどうしようもないほどの馬鹿だということが分かりました。
0170デフォルトの名無しさん
NGNGすべてのメッセージがそこを通るんだから描画と処理の同期がおかしくなる
0171デフォルトの名無しさん
NGNG0172デフォルトの名無しさん
NGNG0,
DeviceType.Hardware,
フォーム,
CreateFlags.SoftwareVertexProcessing,
パラメータ );
のときに 1つめの引数が0になっていますが0ってどういう意味でしょうか?
C++ヘルプでは
Adapter[in]ディスプレイ アダプタを示す序数。D3DADAPTER_DEFAULT は常にプライマリディスプレイ アダプタである。
とありますが 0はプライマリディスプレイアダプタなんでしょうか?
0173デフォルトの名無しさん
NGNG0174172
NGNGdefineの数値に対応してるんでつね、
ありがとうございます
にしてもC++のへるぷないとどうにもなりまつぇんね・・
おとなしくC++でヤったほうがよいのかとすら思えてきますた
0175デフォルトの名無しさん
NGNG自分のこと書いて楽しいですか?
0176デフォルトの名無しさん
NGNG馬鹿って言い方は失礼だと思うぞ。
単に、ここ最近のWindowsの仕組みを知らずに言い放った愚か者ってだけ。
0177デフォルトの名無しさん
NGNG0178デフォルトの名無しさん
NGNG0179デフォルトの名無しさん
NGNGここ最近って何か変わったの?
0180デフォルトの名無しさん
NGNG阿呆なことは考えない。
0181デフォルトの名無しさん
NGNGおまいの理屈だと
チュートリアル作ったやつも
VB厨って解釈できるが
それについて何かコメントおながいしまつ
もうね、ループすりゃどうだっていいじゃん
偉そうなこと書くなら
おまいらの言う理想のループ処理とやらを書いてくれ
参考にさせてもらうから
0182デフォルトの名無しさん
NGNG0183デフォルトの名無しさん
NGNG0184デフォルトの名無しさん
NGNG0185デフォルトの名無しさん
NGNGおまいの理想とする
スレッド使ったコードを晒してください
話はそれからだ
*言うだけなら誰でも*
0186デフォルトの名無しさん
NGNGいい加減、うっとおしくなってきた。
0187デフォルトの名無しさん
NGNG何故C#になるとスレッドを使おうとしないのか不思議で仕方がない。
別にC#特有の問題が存在するわけでもないのに。
0188デフォルトの名無しさん
NGNGC#ではメインループとウィンドウメッセージを意識せずにコードが
書けるからでは?
0189デフォルトの名無しさん
NGNGスレッドの場合
たとえば16ms毎にゲーム処理のスレッドを呼び出すとすると、もしスレッドの処理が3msで終わってしまえば
次の呼び出しまでの13msは待ち時間となり無駄になるだろ?
でもメインループなら、マシンの限界まで処理を回ることができる。
お前ってMFCしか使ったこと無いの?
0190デフォルトの名無しさん
NGNGあと、アクションゲームの場合は、おそらくイント単位で処理することになるから、
メインループでもスレッドでも、待ち方が違うだけで同期処理は同じになると思われ。
0191デフォルトの名無しさん
NGNG0192デフォルトの名無しさん
NGNG待ち時間はSleepなり、正格にやるならマルチメディアタイマーのイベントシグナル(コールバックを使わない方法)等で
処理を休ませることになるが、Win32APIでプログラムを組んだことがないの?
0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNGとりあえず叩き台になるソース晒せや
*言うだけなら誰でも*
0195デフォルトの名無しさん
NGNG推奨していない言語仕様だからなぁ。
0196172
NGNG頂点バッファ.Lock(0, 0, 0);
といふ頂点をロックする処理がありまつが、
1つめの引数=頂点バッファをロックを開始する位置(バイト単位)
2つめの引数=頂点バッファをロックするサイズ(バイト単位)
でいいのでせうか?
しかも両方のパラメータが0なのでバッファ全体をロックを指定したといふことですよね?
3つめの引数は0になってまつが、
D3DLOCK_DISCARD
D3DLOCK_NO_DIRTY_UPDATE
D3DLOCK_NO_SYSLOCK
D3DLOCK_READONLY
D3DLOCK_NOOVERWRITE
のどれが0だかわからないでつ デファインに対応した数値表とかないんでつかね?
0197デフォルトの名無しさん
NGNG何が問題なのか提示せず反論だけ。
*言うだけなら誰でも*
0198デフォルトの名無しさん
NGNG素直にMC++と併用するのが無難でしょう。
0199デフォルトの名無しさん
NGNGマルチメディアタイマーの機種依存、Sleepの精度
Win32APIやったことあるなら知ってるだろ?
そういう話題の振り方して逃げるようなこと書くなや
0200デフォルトの名無しさん
NGNGマルチメディアタイマーに関しては機種依存といっても、最小間隔の値のが違うだけで、
しかも1msに設定できないのは、そうとう昔のチップセットの話。
3Dを扱うPCスペックのマシンで、最近も問題があるというのなら具体例を挙げて欲しい。
今、機種依存の問題と書くからには、それなりの根拠があった上での話だよね?
0201デフォルトの名無しさん
NGNG☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・)< DirextXのラッパークラスまだー?
\_/⊂ ⊂ )_ \________
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
|  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :|
| 愛媛みかん |
0202デフォルトの名無しさん
NGNGここのバカどもには答えられないから他で質問汁
まぁ漏れもそんなバカどもの一人だが
0203デフォルトの名無しさん
NGNG0204デフォルトの名無しさん
NGNG0205デフォルトの名無しさん
NGNG0206デフォルトの名無しさん
NGNG届かなくてもいいとこなら使うって感じなんだが、
ゲーム開発の世界ではふつーに使ってるものなの?
0207202
NGNGC++のほうも見たが196 の
>どれが0だかわからないでつ デファインに対応した数値表とかないんでつかね?
は俺もわかりませんでつたよ わかる神はいませんか?
>1つめの引数=頂点バッファをロックを開始する位置(バイト単位)
>2つめの引数=頂点バッファをロックするサイズ(バイト単位)
>しかも両方のパラメータが0なのでバッファ全体をロックを指定したといふことですよね?
これはたぶんあってると思う
■ このスレッドは過去ログ倉庫に格納されています