トップページ⇒tech
1001コメント303KB

C#でDirectX9 初心者の館

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
Windows Longhorn でGDIに取って代わって標準になりそうなDirectX9ですが
GDIと違ってドキュメントも難解で何をすれば描画できるのかさっぱりさっぱりなライブラリです。
その上知っている人はレベルが高すぎて聞いても宇宙語でしす(泣
そんなDirectX9を将来に備えて勉強してみようというスレです。
Microsoftの掲示板
http://www.gdncom.jp/general/bbs/ShowForum.aspx?ForumID=29
SDKをダウンロードできるところ
http://www.microsoft.com/japan/msdn/directx/downloads.asp#CDasp#CD
0561デフォルトの名無しさんNGNG
音鳴らすってことを全部DirectSoundでできたら楽なのにとか思ったんだろ?
それ以外はダメなんて一切書いてないしAudioあたりで満足したみだいだし放置しとけ
0562デフォルトの名無しさんNGNG
>>561
匂いを出すってことは全部DirectSmellでできることを知らない罠。
0563デフォルトの名無しさんNGNG
>>562
神きたーーーーーーーー!!!!!!!!
DirectSmell使ってみたけどホントに臭い出たよ!!
ようやくレモンの香りのするシューティングが完成しそう
アリガトン!!!

















って時代がいつか来るのかな・・?
臭い出た時点で少なくともクリスクロスは超越するわけだが
0564デフォルトの名無しさんNGNG
現代でいうブラクラのニオイ版とかあったら、マジで洒落にならないよな。
悪質なニオイに出くわしたら、ほんとに吐いて具合悪くするんじゃない?
0565デフォルトの名無しさんNGNG
そうなると、きっと匂いファイヤーウォールとか出るに違いない。
フィルタリングする項目にウンコ、カメムシ、生ごみとかリストアップしてあったりして。
0566デフォルトの名無しさんNGNG
あ
0567デフォルトの名無しさんNGNG
 匂いファイアウォール・・・。嫌ですね。特にカメムシは・・・。
質問です。C#でForceFeedbackについて簡単に解説&サンプルが載ってるページってご存知でしょうか?
 あと「それぐらい調べてください」といわれそうですが、質問ついでに質問します。ごめんなさい。
DirectPlayは使ったことがないので良く分かりませんが、
 一つの空間に複数の人がアクセスしてくるようなプログラムを作成したい場合、
DirectPlayの関数で、簡単に空間を共有してくるような機能ってありますか?やっぱり、
DirectPlayは単なる通信の方法でしかなくて、オブジェクトの共有とかデータで送ってあげないとムリですか?
やっぱ、そこまではできませんよね?
0568デフォルトの名無しさんNGNG
>匂いファイヤーウォール
匂いデバイスを意図的に誤動作させるパケットを切れば・・
それ以前に匂いを発生させるデバイスがない限り無問題っぽいが
そんな装置作ったら特許モンだよな

> 一つの空間に複数の人がアクセスしてくるようなプログラムを作成したい場合、
クライアント/サーバー トポロジのことを言ってんのか
ピアツーピア トポロジのことを言ってんのか
どっちなのかはっきりしてほしいぞ ヘルプに絵つきで糞わかりやすい解説がついてるからまずそれを見てくれ
たぶんクライアント/サーバー トポロジのほうを想定してるんじゃないと思うが

>DirectPlayの関数で、簡単に空間を共有してくるような機能ってありますか?
>DirectPlayは単なる通信の方法でしかなくて、オブジェクトの共有とかデータで送ってあげないとムリですか?
たとえばおまいさんの想像してるのは
キャラクタ1〜10までの座標とHPを共有 とか設定すれば勝手にデータ転送して整合性保ってくれる
みたいなのか? だとしたら無理 そんな都合のいい機能はないかと思われ 自分で実装しる
DirectPlayはパケット(文字列やら数値やら音声やら)を転送するための手段を提供してくれるだけと考えておいたほうがよいよ
0569デフォルトの名無しさんNGNG
>>563
そのくらいヘルプ嫁、と言いたいところだが、ヒントだけな。
味はとりあえず俺の好みに合わせているが、各人好きなように調整してくれ。

DirectSmell.Device dev = new DirectSmell.Device(form1);
DirectSmell.Buffer coffee = DirectSmell.Presets.Coffee.Wonda.MorningShot(CoffeeStrength.Strong, CoffeeSugar.Double, dev);
coffee.Play();
0570デフォルトの名無しさんNGNG
>>569
匂いだけでなく味まで再現するのか・・
どんなハードウェアか想像もつかん













みんなが飽きる前にそのネタやめとけ?
0571デフォルトの名無しさんNGNG
もうとっくに飽きてるんですが何か。
0572デフォルトの名無しさんNGNG
たぶん、色表現をRGBの値で表現するように、
色々においを表現できるんだろうな。
ウイルスの付録になりそう。
0573デフォルトの名無しさんNGNG
>>569
砂糖入れすぎ
0574デフォルトの名無しさんNGNG
おまいら、たまにはニュースみろよ
臭いのでるデバイスはネットカフェで遊べるよ
東京だけど
0575567NGNG

>DirectPlayはパケット(文字列やら数値やら音声やら)を転送するための手段を提供してくれるだけと考えておいたほうがよいよ

 やっぱりそうですよね。もしかしたらそういう「便利な機能もあったりして?」と思っただけです。
お手数をおかけしました。
0576デフォルトの名無しさんNGNG
DirectDrawを使って2D画像を拡大縮小させたりしたいのですが、2D画像のサイズは
2の倍数しか扱えないのですか?
0577576NGNG
それと、C#のGDI+系の命令と共存して使用できますか?
0578デフォルトの名無しさんNGNG
wmsdk.hって何を落とせば入ってくるの?dx9sdk落とせばいい?
9入れたら8戻らないとかあったりしませんよんね
0579デフォルトの名無しさんNGNG
>>577
できるよ。
Surface.GetGraphics() で GDI+ のグラフィックスオブジェクトをゲットできる。
使い終わったら Surface.ReleaseGraphics() で開放すること。

そのときの注意点は以下の通り。

・サーフェスのフォーマットはバックバッファに使われるのと同じ種類でないとダメ。
・サーフェスをミップマップのテクスチャチェーンに入れてはダメ。
・すでにロックしてあるサーフェスに Surface.GetGraphics() を呼び出すと失敗する。
・サーフェスがレンダーターゲットの場合は、ロッカブルであること。
・メモリプールを Pool.Default にした場合はダイナミックバッファであること。
・メモリプールがスクラッチの場合は常に失敗する。
0580デフォルトの名無しさんNGNG
>DirectDrawを使って2D画像を拡大縮小させたりしたいのですが、2D画像のサイズは
>2の倍数しか扱えないのですか?

DirectDrawに関してはんなこた〜ない筈
拡大縮小も任意の数値で思いのママだよ
その昔、爺フォースとかのグラフィックボードが
3Dポリゴン(メッシュ)に貼り付けるテクスチャは
2の乗数でないとダメって仕様なのはあったとは思ったが
たぶんそれと勘違いしてるのかと思われ
0581デフォルトの名無しさんNGNG
>>573
とりあえずソースよろしこ
もしホントなら逝ってきて体験談をここに記す
0582デフォルトの名無しさんNGNG
間違えた>>574だったよ
0583デフォルトの名無しさんNGNG
>>576
>2の倍数しか扱えないのですか?

偶数しか使えないとかいう制限は聞いたことないな
0584デフォルトの名無しさんNGNG
>>526
そろそろ届く頃かな?
本の感想きぼん
0585デフォルトの名無しさんNGNG
526じゃないけどアマゾンで買ってみた。
これくらいの英語ならさくさく読める感じ。高校レベル+専門用語知識

内容は…あんまり深く読んでないのでパス。
4kちょいの出費が痛くなければいいんじゃない?
0586デフォルトの名無しさんNGNG
>>508の被害者がまた一人増えたな。
SAMSマンセー
0587デフォルトの名無しさんNGNG
>>586
君はくだらない人間だな。
0588デフォルトの名無しさんNGNG
ピアーツーピアを使ったサンプルってありませんかね?
0589デフォルトの名無しさんNGNG
サンプルもなにも
PtoPなら普通にチュートリアルあるだろうが
0590デフォルトの名無しさんNGNG
>>589
それは何処にありますか?
ドキュメントの中から探しても見つからなかったんですけど。
0591デフォルトの名無しさんNGNG
LightにCommitというメソットがあります。
ヘルプを見ると「指定したライトに対する遅延ライト設定を適用する。」
と書かれてあるのですが、この意味がさっぱり分かりません。
遅延ライトとはどういう意味なのでしょうか?
0592デフォルトの名無しさんNGNG
3D空間内にテキストを出す方法ってないですか?
人のモデルの頭上にテキストをつけたいんですが
C++でもいいのでサンプルないですかね。
0593デフォルトの名無しさんNGNG
>>591
Summer 2004 では Commit() はなくなって、代わりに Update() になっている。
Light の各プロパティは、それぞれ変更された瞬間に値がデバイスに反映されるのではなく、
Commit()/Update() されるまで反映されない。
Update(); と Enabled = true; は同じ意味。

“遅延ライト”というのはよく分からない。
そもそも、"light" なのか "write" なのか…。(意味的には後者。)
0594デフォルトの名無しさんNGNG
>Update(); と Enabled = true; は同じ意味。
けひひ。これは本当ですか?
0595デフォルトの名無しさんNGNG
ちょこちょこ仕様変えるのは勘弁してもらいたいなぁ。
0596デフォルトの名無しさんNGNG
>>595
ホントだよねぇ。

俺たちをヒトバシラーにしてWinFXのグラフィック関連は使いやすくなるんだろうか?
そうなってもらわないと、報われないよ。ハニワ。
0597593NGNG
>>594
あうあう。ここでは“意味”ではなく“効果”というべきでした。

> Changes made to the Light object's properties do not take effect until this method is called,
> or Light.Enabled is set to true.

Enabled = true で Update() と同じ効果(デバイスの更新)が得られる。
Update() は Enabled = true; で代用できる。
Enabled プロパティの本来の目的は Light の有効無効の切り替え。
Light を利用するには Enabled = true; が必須。(Update() だけでは有効にならない。)
0598デフォルトの名無しさんNGNG
>>590
DirectPlayのチュートリアルにのってるよ
まずはそこ嫁
0599デフォルトの名無しさんNGNG
>Update(); と Enabled = true; は同じ意味。
まじでこれは本当ですか?
0600デフォルトの名無しさんNGNG
>>599
自分で試してみればいいんでない?
0601デフォルトの名無しさんNGNG
>>593自身も書いているが、

>Light を利用するには Enabled = true; が必須。(Update() だけでは有効にならない。)

という時点で少なくとも同義ではない。
よって>>594のけひひは正しい。
0602デフォルトの名無しさんNGNG
すいません。
Visual Studio .netのアカデミック版使っているんですが、分からないところが・・・。
DirectXのSDKをインストールしてもプロジェクトのところにDirectが追加されません。
それにサンプルもコンパイルが通らないです。
いくら調べても
「SDKをインストールするとプロジェクトに追加されます」
見たいなことしか書いてありません。

どこか設定おかしいのかと思っていろいろいじくって見ましたが、結果は変わらず。
さらに日本語ドキュメントをインストールしたにもかかわらず、そんなものありません。

どこかおかしいとは思うんですが、なにぶんC#初めて4ヶ月足らずなものですからぜんぜん分かりません。
教えていただけないでしょうか?
0603デフォルトの名無しさんNGNG
>>602
サンプルブラウザのempty projectをフォルダにインストールするがよい
0604デフォルトの名無しさんNGNG
DirectPlayのサンプルでパケを送信するとき
送信フラグに C++でいうところのDPNSEND_SYNCが設定されてますが

DPNSEND_SYNC=非同期 IDirectPlay8Peer::SendTo 要求を取り消す。

これだけではワカランです
非同期の要求を取り消す=同期させるってとこですか?
何に同期させるのか、同期と非同期が具体的にどう違うのか知ってる方いたら教えてくらはい
0605デフォルトの名無しさんNGNG
>>603
ありがとうございます。
一応インストールしてみました。
しかし、インストールして実行してみますと、なんか
「オブジェクト参照がオブジェクトインスタンスに設定されていません」
と意味がさっぱり分からない警告が出ます。
教えてくれたことの意味を取り違えていたらすいません。

何かいい本ないでしょうか・・・・。
実はは格闘ゲーム(2D)を作ってみたいのです。
参考になる書籍などを探しているのですが、なかなか見当たりません。

そもそもそういったものはDirectXを使わないでも実現できるものなのでしょうか?
DirectXの概念といいますか、何も分からないもので。
すいません。
0606デフォルトの名無しさんNGNG
ゲームスピードにもよりけりだろうけど多分GDI+じゃ無理だと思う
0607デフォルトの名無しさんNGNG
ADVでおなじみのクロスフェードをC#でしこしこ書いてみたんだけど、
そこそこ実用的な速度になったよ。
ただ、同じことをGDI+でやらせようとすると無茶苦茶遅い。
0608605NGNG
やっぱりDirectX使ったほうがよいのでしょうか。
使ったほうが、というより勉強した方がっていうのが正しいですけどw

でも・・・まだDirectXのサンプルのコンパイルが通りません・・うるうる(涙
昨日書き込んだ後からもずっと解決策を探していましたが、いまだにできません。

あと書籍のことですが、DirectX関連の本は全部3Dグラフィックばっかりで・・。
自分にはとても・・・・経験足りなくて分からないです。
2D関係のことを解説している本はあるでしょうか?
C++では見つけたような気もしますが、C#が見つからないです。
なにか書籍はあるでしょうか?
またまた申し訳ありませんが、よろしくお願いします。
0609デフォルトの名無しさんNGNG
>>508の本は2Dも一つの章を使って解説してるよ。オススメ。
0610608NGNG
え・・・英語っすか・・。
鳥肌が・・・・。
でもやってみないとこの先進めなさそうですから、がんばって読むしかなさそうですね。
ありがとうございました。

英語分からなくてもソースコードだけで十分という方もおられるようですが
それだけの技術はまだないっす・・・・・。
和訳ソフトを共同で読み進めていけるぐらいだと期待して、購入いたします。
0611デフォルトの名無しさんNGNG
また>>508の本薦めてるやつがいるな・・

どっか立ち読みで確認できる本屋の情報きぼん
0612デフォルトの名無しさんNGNG
つかUpしてくれ
0613デフォルトの名無しさんNGNG
あの本は良質だから、買って損はないよ。
気になるなら、amazon.comのほうのレビューを読んでみたらどうかな。
0614508NGNG
>>611
>>522

Kick Startシリーズが何冊かまとめて置いてあるから、すぐ見つけられると思う。
0615デフォルトの名無しさんNGNG
>>612
技術情報を得るのにケチるなよ。
0616デフォルトの名無しさんNGNG
べつに3Dだから2Dが使えないって事はないわけで・・・・・。
データをヴュー変換後のモノとして扱えばそれで2Dな訳だ。

Object Space
   ↓
World Space
   ↓          ← Model-View/World 変換
Camera Space
   ↓          ← Projection 変換
Homogeneous Space
   ↓          ← Viewport 変換
Window Clipping Space
  (これが実際のウィンドウでの座標になる)

Managed DirectX では
  CustomVertex . TransformedXXX となっているのがヴュー変換後の座標値。

CustomVertex.Transformed
CustomVertex.TransformedColored
CustomVertex.TransformedColoredTextured
CustomVertex.TransformedTextured
0617デフォルトの名無しさんNGNG
ヴ  ュ  ー  !  !
0618デフォルトの名無しさんNGNG
以前Cマガで、DirectXを使って2Dを扱うという特集があったので参考にした。

>ヴュー
ワラタ(失礼)
0619508NGNG
マルチBBXばんざ〜い
0620デフォルトの名無しさんNGNG
>>618
2003年10月号?
ほかにもあるなら教えてけれ
0621デフォルトの名無しさんNGNG
ttp://wanderer.jp/

ここの管理者が書いてる。
何度か特集があったんで立ち読みしてきたが、
これのために買うくらいなら、ヘルプ、サンプルを眺めたほうがよっぽどまし、なレベルだ。
0622デフォルトの名無しさんNGNG
>>620
2004/03 学校の図書館でコピーしたのを持ってるから間違いない。
0623618NGNG
>>620-622
結構前だった気がする。ということで検索したら2001年10月号だった。
ttp://www.cmagazine.jp/contents/200110.html
当時はEnter the 3D Programmingなんかも連載していて参考になった。
0624デフォルトの名無しさんNGNG
C#でForceFeedbackについて簡単に解説&サンプルが載ってるページってご存知でしょうか?
0625デフォルトの名無しさんNGNG
C#でDirectXを使う人も増えてきたみたいだし、
そろそろ和書も多くなっていいと思うけどなぁ。
0626デフォルトの名無しさんNGNG
SDK Update (Summer 2004)をインストールしたら
vs.netのDirectXウィザードで作られたアプリがビルドできなくなった。

名前空間がないとかどうたら言われて・・・
0627デフォルトの名無しさんNGNG
>>626
リリースノートくらい読めよ・・・
マルチくらい自覚しろよ・・・
0628デフォルトの名無しさんNGNG
45度見下ろしRPGで、地面をクリックすると緑の環ができる
やり方知ってる方います? スクリーン座標と地面座標の合せ方がちょと
わからないんですけど・・・。
0629デフォルトの名無しさんNGNG
緑の輪ってどこにどう表示されるんだ?
あと地面は平坦か?
ぐらいは書けよ…
0630デフォルトの名無しさんNGNG
シミュレーションRPGみたいなのかな?
0631デフォルトの名無しさんNGNG
プログラムをまともに書けない奴は、説明のための文章もまともに書けない。
0632デフォルトの名無しさんNGNG
>>631
こっちのほうが正しくねえか?

説明の文章をまともに書けない奴は、プログラムもまともに書けない。

0633610NGNG
すいません。
本当に助けてください・・・。
あれからずっとプロジェクトのところにDirectXという項目を追加させるための設定をいろいろ見ていましたが
やはりいまだにできません・・・。
ttp://www.plustarnet.com/aspil/Programming/
ttp://www.wander.jp/dotnet/index.html
を見ても解決できませんでした・・・・。
これ以上打つ手がなくて困っております・・・。
本当はあるんでしょうが、私の実力だともう限界です。
設定でなにやってんだ?って感じでしょうが
教えていただきたく存じます。
0634デフォルトの名無しさんNGNG
だからウィザードには追加されないと何度言えば(ry
0635デフォルトの名無しさんNGNG
・・・と思ったがもしかして参照の設定のことを言ってるのか?
0636デフォルトの名無しさんNGNG
>>631-362
どちらも可である可逆式ですか・・?

例えばあるメッシュが表示されてたとして
スクリーン座標(X,Y)にはそのメッシュが表示されているか調べるメソとかないんでしょうか
あるいはあるメッシュのスクリーン座標(X,Y)を返すメソとか
0637デフォルトの名無しさんNGNG
計算すればいいだけの話で、何が聞きたいのかさっぱり分からん。
0638デフォルトの名無しさんNGNG
>>634-635
あれ?ウィザードには追加されないんですか?
そうだったら・・・・なんて無駄な努力を・・・・。

申し訳ありません・・・・。
その参照の設定というのを教えてもらえませんでしょうか?
0639デフォルトの名無しさんNGNG
>>602-603
0640デフォルトの名無しさんNGNG
>>637
プ
0641デフォルトの名無しさんNGNG
>>633

>>480-481
とかじゃ駄目?
0642デフォルトの名無しさんNGNG
質問が下手な人は損だな。
0643デフォルトの名無しさんNGNG
>>610
最新版のSDKじゃなくて
一つ前のやつ(summer2003update)を入れればウィザードが出ますぜ。

購入した本がウィザードがあることを前提にして解説してたもんで
summer2003で学習してますが・・・
いつか最新のSDKに切り替えないとまずいんでしょうね。
0644デフォルトの名無しさんNGNG
 VertexBufferで四角のBOXを作成して、それを半透明にしたいと思っています。が・・・。
どこをどうやったら半透明になるのかサッパリわかりません。
半透明の設定はどこを設定すればいいのでしょうか?ご教授をお願いします。
0645デフォルトの名無しさんNGNG
>>644
マテリアルのアルファ値をさげればよろし
RenderState.AlphaBlendEnableもかえる
0646デフォルトの名無しさんNGNG
デバイス.RenderState.SourceBlend=Microsoft.DirectX.Direct3D.Blend.SourceAlpha;
デバイス.RenderState.DestinationBlend=Microsoft.DirectX.Direct3D.Blend.InvSourceAlpha;
デバイス.TextureState[0].AlphaOperation= Microsoft.DirectX.Direct3D.TextureOperation.Modulate;

ブレンド設定とか αオペレーションの設定も必要〜
と追加してみるてすと
0647デフォルトの名無しさんNGNG
へっぽこハミルトニアン
0648641NGNG
>>640
おお!
これは気が付きませんでした・・。
できました!!
ありがとうございます。
でもなぜ2004だとウィザードに追加されないのでしょうね。
やはり最新バージョンの2004で勉強していったほうがよいのでしょうか?
2004はどこか変わっていたりするんでしょうが、どっちの方がいいのかなと・・・。
0649644NGNG
返答ありがとうございます。

645
> マテリアルのアルファ値をさげればよろし
マテリアルのメソットにアルファの値を入力できるような項目がないのですが・・・。

0650645NGNG
>>649
material.Diffuse = System.Drawing.Color.FromArgb(128, 255, 0, 0)

とか
>>646をやればアルファ下げる必要はない気もする

だめならとか
device.RenderState.SourceBlend = Blend.SourceColor;
device.RenderState.DestinationBlend = Blend.InvSourceColor;
0651644NGNG
>>650
できました!!
 おかげさまで助かりました。ありがとうございます。

0652デフォルトの名無しさんNGNG
>>648
>でもなぜ2004だとウィザードに追加されないのでしょうね。
メンテが大変だからウィザードはもう作らない、サンプルexeからプロジェクトをインストールしてくださいな、
みたいなことがリリースノートに書いてあった気がしますが。
うろ覚え。
0653デフォルトの名無しさんNGNG
3Dゲームプログラミングに必要な数学って、
線形代数と微分積分位でしょうか?
空間図形は役に立ちますかね・・・。
0654デフォルトの名無しさんNGNG
ここに載ってるくらいが普通に分かっていればいいんじゃねえか?
ttp://yaneu.com/yaneurao/3dcg/
0655デフォルトの名無しさんNGNG
>>653
とりあえず線形代数だけわかっていれば問題ない。

微分積分はまじめに計算することはめったにない。
たいていコンピュータ向けの解法をつかう。
たとえば微分だと極小区間の単純な差分で求めたり
積分でもモンテカルロ積分をつかったり。
0656デフォルトの名無しさんNGNG
>>654-655
レスどうもです。
とりあえず、線形代数から学んでみようと思います。
0657デフォルトの名無しさんNGNG
3Dゲームプログラマーのための 数学 [基礎編]
が工学社からでるらしい。
0658デフォルトの名無しさんNGNG
>>657
http://www.esbooks.co.jp/books/detail?accd=31431355
これですね。
本屋さんでみかけたら覗いてみます。
0659デフォルトの名無しさんNGNG
その大川義邦って人、モーレツに内容の薄い本を書くよね。

DirectX9 3Dゲームプログラミングって本、アマゾンで
買っちゃったんだけど、インキネ技を上下巻にわけて
延々と解説してる。もうちょっと書く事あるんじゃないかと・・・・・・。
ステップ・バイ・ステップなのはいいんだけどさぁ。

俺はEric Lengyelの数学本だけでよいや。
シンプルにまとまってるし、そこそこ内容も詰め込まれてる。

ttp://www.amazon.co.jp/exec/obidos/ASIN/1584502770/qid=1095931465/sr=1-2/ref=sr_1_2_2/249-9283699-1129136
0660デフォルトの名無しさんNGNG
DirectXの国産書籍はろくなのがないね・・ 実際
■ このスレッドは過去ログ倉庫に格納されています