トップページ⇒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
0464デフォルトの名無しさんNGNG
>>438
俺はこんな感じでやってる。こんなんでいいのかは知らんが。
sc /nologo /target:winexe /out:xxx.exe /optimize /win32icon:icon\xxx.ico /lib:C:\WINNT\assembly\GAC
/r:Microsoft.DirectX\1.0.900.0__31bf3856ad364e35\Microsoft.DirectX.dll;Microsoft.DirectX.Direct3D\1.0.900.0__31bf3856ad364e35\Microsoft.DirectX.Direct3D.dll;
Microsoft.DirectX.Direct3DX\1.0.900.0__31bf3856ad364e35\Microsoft.DirectX.Direct3DX.dll;Microsoft.DirectX.DirectInput\1.0.900.0__31bf3856ad364e35\Microsoft.DirectX.DirectInput.dll source\*.cs
0465デフォルトの名無しさんNGNG
やべー、いくつか改行入れたのにまだ長すぎた(汗)
みなさんすいません。
0466デフォルトの名無しさんNGNG
しかもコンパイラ名の c が抜けて sc になってるよ。
今日はもうだめぽ。
0467デフォルトの名無しさんNGNG
ていうか長ぁ
0468デフォルトの名無しさんNGNG
>>464-467
モチュチケ
0469デフォルトの名無しさんNGNG
>>467
ごめんね。
0470デフォルトの名無しさんNGNG
↓

こんな感じのテクスチャを用意しておいて、
スプライト描画するときに回転させて描画(←とか↑とか)させたいんですが
どうやったらできるでしょうか?
Sprite.Draw2D()に回転角を引数に取るものがあったのですが、
説明が少なくてよくわかりませんでした。
(全体が回転する?)
0471438NGNG
>>464
できたYO。
0472デフォルトの名無しさんNGNG
>>457

俺も2004summerを入れたけど、ウィザードできなかった。
VisualStudioのバージョンは2003。
theSpokeのやつ。

VisualStudio2003じゃウィザードでないですか?!

激しい既出の質問ですが、答えらしい答えは無かったような気がします。
どなたか分かる方いたら、教えてください!
おねがいしゃす!おねがいしゃす!
0473デフォルトの名無しさんNGNG
Summer2004ではウィザードは廃止された。
代わりにGUIも使える新しいフレームワークのサンプルが、
EmptyProjectとしてサンプルブラウザからインストール出来る。

これFAQになりそうだ。
0474472NGNG
>>473 は 唯一神です。

ありがたき幸せ。生きていて本当に良かった。ありがとう。ありがとう。
0475デフォルトの名無しさんNGNG
>>473
つーコトは、VC#以外の開発環境(ボーランドの奴とか#D)でもサクッと作れるように
なったのか。ヒャッホウ!
0476デフォルトの名無しさんNGNG
てか、機能ダウンだろ。
0477デフォルトの名無しさんNGNG
根本的にウィザードなど使用する必要性がないのでどうでもいい。
0478デフォルトの名無しさんNGNG
日経ソフトウェアで連載始まったらしいけど
他にも連載してるとこある?
Cマガで2回ほど特集してるのは持ってるんだけど
0479デフォルトの名無しさんNGNG
>>478
アバンジェリスト川西さん期待age。

Cマガでやってた特集はどれも糞。
連載は他にはやってないんじゃないかなあ。
0480デフォルトの名無しさんNGNG
VS.NET 2003でManagedDXウィザードを使うには。

1. Summer2004にウィザードは含まれないため、まずDX9SDK Summer2003を入れておく。

2. DX9SDK Summer2004を入れる。

3. ウィザードのテンプレートファイルを修正する。
 具体的には [VS.NET2003をインストールしたディレクトリ]\VC#\VC#Wizards\Mdx9AppWizard\Templates\1033\
 例えば C:\Program Files\Microsoft Visual Studio .NET 2003\VC#\VC#Wizards\Mdx9AppWizard\Templates\1033\

3.1 ファイル:D3DBlank.cs
 219行:
  Color.White.ToArgb()
  -> Color.White

3.2 ファイル:D3DApp.cs
 61行:
  RenderStates
  ->RenderStateManager
 62行:
  SamplerStates
  -> SamplerStateManagerCollection
 63行:
  TextureStates
  -> TextureStateManagerCollection

つづく。
0481デフォルトの名無しさんNGNG
つづき。

3.3 ファイル:D3DFont
 40行:
  TextureState
  -> TextureStateManager
 41行:
  TextureState
  -> TextureStateManager
 42行:
  Sampler
  -> SamplerStateManager
 43行:
  RenderStates
  -> RenderStateManager

3.4 ファイル:D3DUtil.cs
 925行:
  RenderStates
  -> RenderStateManager

3.5 ファイル:D3DEnumeration.cs
 379行:
  ref qualityLevels
  -> out qualityLevels

4. ウィザードからプロジェクト作成して、DirectX系の参照が
 バージョン1.0.2902.0(Summer2004)になっていることを確認しつつコンパイル。

5. 嘘ついてたらごめんょ。
0482デフォルトの名無しさんNGNG
ウィンドウのクライアント領域と同じ大きさのバックバッファサーフェスを作ったんですけど、
ウィンドウのサイズが変更されたときに、サーフェスのサイズを変更するにはどうしたらいいんでしょうか?
プロパティやメソッドの一覧を見ても、サイズを変更する方法が見つかりません・・・
0483デフォルトの名無しさんNGNG
protected override void OnLayout(LayoutEventArgs e)
{
  image.Dispose();
  image = new Bitmap(ClientSize.Width, ClientSize.Height);
}
0484デフォルトの名無しさんNGNG
新しく作り直すしかないんすか・・・ (´・ω・`)
なんかオーバーヘッドがでかそう。
0485デフォルトの名無しさんNGNG
オーバヘッドを気にするのなら、そもそもC#という選択に問題がある。
0486デフォルトの名無しさんNGNG
>>485
C++ だとどうやるんですか。参考までに。
0487デフォルトの名無しさんNGNG
>>485
Java だとどうやるんですか。参考までに。
0488デフォルトの名無しさんNGNG
あるけど

backSurface.SurfaceDescription.Width
backSurface.SurfaceDescription.Height
0489デフォルトの名無しさんNGNG
>>486
そもそも、フレームバッファをウィンドウフレームのサイズに拡大縮小してBlitしているだけで(CViewが勝手にやってくれるんだと思う)、
クライアントエリアの大きさが変更されても、実際にフレームバッファ(フロント・バック・Z・ステンシル等)のサイズが変更されるわけじゃないよ。
だから、320x240のフレームバッファを1024x768のウィンドウフレームに表示してくれるしその逆もある。
0490デフォルトの名無しさんNGNG
拡大縮小を行うか否かは出力時に決定するものだが、
なぜ突然行うことが前提で話し出す馬鹿が出現するんだろう?
0491デフォルトの名無しさんNGNG
>>489
>だから、320x240のフレームバッファを1024x768のウィンドウフレームに表示してくれるしその逆もある。
主観だけど、そんなゲームやりたくないし、作りたくないよ。っていうか、482で明確に

>ウィンドウのクライアント領域と同じ大きさのバックバッファサーフェスを作ったんですけど、
って書いてるから、今話してるプログラムはそういうタイプのものでは無いと思う。
0492デフォルトの名無しさんNGNG
>>491
おまえこそなんか勘違いしている。
0493デフォルトの名無しさんNGNG
理由も無しに決めつけるのはよくないですね
0494デフォルトの名無しさんNGNG
>>492
どう勘違いしてるの?参考までに。
0495デフォルトの名無しさんNGNG
>>494
何がわからないの。参考までニヒヒ。
0496デフォルトの名無しさんNGNG
なんか10秒に一回くらい、0.5秒くらい固まるんだけど、コレって何?
0497デフォルトの名無しさんNGNG
ガベコレががんばっているんじゃないの?
0498デフォルトの名無しさんNGNG
Dispose を忘れてますた OTL
0499デフォルトの名無しさんNGNG
directinputでマウスの動きを検出しようとしてるんだが、
何故かdeviceのSetEventNotificationで設定したイベントが
飛んでこない。
サンプルと同じようにやってるのに何故だorz
0500デフォルトの名無しさんNGNG
中濃ソース晒さんとアドバイスもできん
サンプルが普通に動いてるなら
おまいのコードが悪いってことに
0501デフォルトの名無しさんNGNG
焼そばソースなら晒せます。
0502デフォルトの名無しさんNGNG
おじさんつまんなーい
0503デフォルトの名無しさんNGNG
> 本来、アニメーションセットの取得には GetAnimationSet メソッドを使うべきですが、
> DirectX 9.0 Update (Summer 2003) では、GetTrackAnimationSet メソッドがその機能を持っています。
> 逆に言うと、このリリースの GetTrackAnimationSet は正しく実装されていません。
> これは修正される予定なので、このコードは将来のバージョンでは正しく動作しません。
> GetAnimationSet メソッドを使ったコードをコメントアウトしていますので、正しく修正されたリリースではそちらを使ってください。


2004夏ではこのバグ(?)は修正されていますでしょうか。
落とされた方教えて下さい。
0504デフォルトの名無しさんNGNG
C#で高速化目指すなら静的なプログラミングじゃないと難しいなぁ。
大量のnew→disposeの繰り返しは厳しすぎる。
まぁゲームは基本的にスタンドアロンだから開始前に大量にメモリ確保しても問題ないか。
いちいち事あるごとにnewなんてしてられないしね。
0505デフォルトの名無しさんNGNG
ここは駄目初心者の日記帳じゃないんだが。
0506デフォルトの名無しさんNGNG
ここは書き込みの内容が支離滅裂で意味不明で標語的な言葉を暗記するだけで判断を外部に任せてしまう駄目初心者の日記帳じゃないんだが。
0507デフォルトの名無しさんNGNG
ManagedDirectXを解説したオススメの書籍とかないでしょうか?
0508デフォルトの名無しさんNGNG
>>507
某MVP大学生も押しているが、イチオシといえばこれしかない。

Managed Directx 9: Kick Start : Graphics and Game Programming
ttp://www.amazon.co.jp/exec/obidos/ASIN/0672325969

なんてたってMDXのAPI設計者自らが書いている点で信頼性大。
ソースコードが歯切れ良く鏤められている点も分かりやすくてよい。
0509デフォルトの名無しさんNGNG
押すじゃなく推すじゃないのか
0510デフォルトの名無しさんNGNG
>508の本は俺も持っている。
突然自分の頭が良くなったんじゃないか?ってぐらいわかりやすい。
超オススメ。
0511デフォルトの名無しさんNGNG
>>508
カケラも日本語でのなさそうな ふいんき(なぜかry)なんだが・・
英語オンリーじゃ教養のない漏れにはつらすぎる
0512デフォルトの名無しさんNGNG
>>511
いや、本当にわかりやすいんだよ。
とにかく英語が平易でわかりやすい。
辞書なしで読み進めることができたんで
自分でもビックリした。
0513デフォルトの名無しさんNGNG
技術英語なら何とかなる.がんがれ
0514デフォルトの名無しさんNGNG
ならないよ

才能のある人間達の会話はこれだから嫌なんだ
0515デフォルトの名無しさんNGNG
才能じゃなくて努力だろ。
がんばれ。
0516511NGNG
どちらにせよ英語確定なわけか・・
立ち読みしてみて判断したいとこだが
洋書じゃそういうワケにもいかんよなぁ・・
0517デフォルトの名無しさんNGNG
MSDN(英語)で挫折した偏差値50の俺でも大丈夫でしょうか?
0518デフォルトの名無しさんNGNG
偏差値50なら学校で英語の授業ないだろ
0519デフォルトの名無しさんNGNG
あったわい
0520デフォルトの名無しさんNGNG
>517
なら無理。
でも努力すれば可
0521デフォルトの名無しさんNGNG
サンプルコードとかって載ってますか?
0522508NGNG
>>521
前の書き込みで書いたが、
コードだけでも読み進められるくらい、
めちゃくちゃいっぱい載ってる。

あと紀伊国屋新宿南店で存在確認。
0523デフォルトの名無しさんNGNG
すまん質問さしてくれ
マネージドの解説本らしいがVBとC#どっち使ってる?
この本にはどんなサンプルがのってるん?
Direct3Dオンリー?
サンプルやチュートリアルで網羅しきれてないサンプルとかある?
ぶっちゃけこれ一冊で簡単な3Dゲが作れるくらいのボリュームですか?

新宿遠すぎ
騙されたともって買ってみるカ・・
0524デフォルトの名無しさんNGNG
騙されないから買っておけ。
0525デフォルトの名無しさんNGNG
> マネージドの解説本らしいがVBとC#どっち使ってる?
C#

> この本にはどんなサンプルがのってるん?
いろいろ
おまけCDはMSI

> Direct3Dオンリー?
いいえ

> サンプルやチュートリアルで網羅しきれてないサンプルとかある?
いいえ(はい)

> ぶっちゃけこれ一冊で簡単な3Dゲが作れるくらいのボリュームですか?
はい(いいえ)

> 新宿遠すぎ
いいえ
0526デフォルトの名無しさんNGNG
> サンプルやチュートリアルで網羅しきれてないサンプルとかある?
いいえ(はい) ←どっちでつか

> ぶっちゃけこれ一冊で簡単な3Dゲが作れるくらいのボリュームですか?
はい(いいえ) ←どっちでつか

アマゾンで注文しまつた
0527デフォルトの名無しさんNGNG
>>526
>>508にまんまと嵌められたな。
糞して後悔するがいい。
0528デフォルトの名無しさんNGNG
Mesh.LoadHierarchyFromFile
でアニメーションが入ってないファイルを読み込むと、

中身が腐ったAnimationRootFrame.AnimationContollerが返ってくる。

外からじゃ腐ってるか判別できないから、
覗こうとして適当なプロパティをを参照した瞬間あぼーんもうだめぽ
0529デフォルトの名無しさんNGNG
何回やってもデバイスの初期化であぼんぬなんですがやっぱノーパソごときでMDX使うのが間違ってますかね?
0530デフォルトの名無しさんNGNG
>>508は、例のマネージド本の出版社の社員です。
>>526は彼の営業活動に騙された、立派な被害者です。
0531デフォルトの名無しさんNGNG
ノーパソもここ2年ぐらいは3D強化されてるから動くと思うけど
どんな化石を使ってるのかね
0532526NGNG
>>530
訴えていいでつか?
0533デフォルトの名無しさんNGNG
>>525補足
おまけCDにはVB.NETのソースもはいってたはず
0534デフォルトの名無しさんNGNG
この本、付属のCDにC#とVBのコードが入ってる。
しかし、すでに1年前の本なんで、サンプルコードがちょっと古くなってるね。
summer2003で書かれているので、summer2004で書いてるヒトは
そのままではコンパイルは通らないハズ。
たとえば、一番最初のプログラム例で、CustomVertex.TransformedColoredの
頂点配列を使うんだけど、

vertices[0].SetPosition(new Vector4(Width / 2.0f, 50.0f, 0.5f, 1.0f));

と、summer2003での書き方になってる。summer2004では、

vertices[0].Position = new Vector4(Width / 2.0f, 50.0f, 0.5f, 1.0f);

このようにメソッドがプロパティに変更されてる。
まぁ、こーゆー所を直しながらコードを打ち込んでいくのも勉強になるんで頑張れ。
0535デフォルトの名無しさんNGNG
いろんなところに、「SHOP TALK」ってあるんですけど、
これってなんですか?

前後の文脈から、点睛慎吾みたいなものかなあと想像するのですが
0536デフォルトの名無しさんNGNG
"Shop Talk"
うんちく話。相手、時、場所を選ばず、自分の商売の話ばかりすること。専門話。
0537デフォルトの名無しさんNGNG
要するに、トリビアか。
0538デフォルトの名無しさんNGNG
英英辞書
ttp://www.webster-dictionary.org/d.aspx?w=shop%20talk

Yahoo! 辞書
ttp://dic.yahoo.co.jp/bin/dsearch?t=o&d=all&p=shop+talk

専門語辞典
ttp://wwwd.nova.co.jp/webdic/webdicc.cgi?imode=yes&dic=ALL&lang=X&word=shoptalk

terminology とか jargon の会話版、みたいな感じか。
0539デフォルトの名無しさんNGNG
藻前らいっしょにShop TALKしようぜ。
0540デフォルトの名無しさんNGNG
summer2003と2004ぜんぜん入れてませんでつた
アップテートとかぬかしてるのに上位互換なんいんですねこいつら
サンプル動かなくて激しく鬱でつ
0541デフォルトの名無しさんNGNG
ちょっと分からないので質問します。
DirectXのMeshクラスでティーポットとかトーラスを作成できますよね。
そのティーポットの頂点データなどを取得する方法はありますか?
どうすればよいでしょうか?宜しくお願いします。
0542デフォルトの名無しさんNGNG
マルチか?コピペか?厨房王国BBXが今夜も嵐を呼ぶ!!
0543デフォルトの名無しさんNGNG
>>541
Mesh.Teapot(device).Device.RenderState.Lighting = true;

これで落ちるらしいぞ。
0544デフォルトの名無しさんNGNG
>>541
あ〜。うろ覚えなんで、自分で確かめてほしいんだけど。
BaseMeshにVertexBufferやIndexBufferをゲットするためのプロパティがなかったかな?
メッシュ、プログレメッシュ、パッチメッシュなどは、このクラスからの継承。

public class Mesh : BaseMesh { ... }
0545デフォルトの名無しさんNGNG
>541.544
Mesh box = Mesh.Box(device,1.0f,1.0f);
VertexBuffer vb = box.VertexBuffer;

ここから、どうやってvbに格納されている頂点データを取得したらいいのでしょうか?
0546デフォルトの名無しさんNGNG
>>545
お前はなぜ自分で調べようとしないんだ?
サンプルならWebにごろごろ転がってるぞ。
0547よしおNGNG
Direct3Dで動いてる画面のスクリーンショットを取るプログラムを作り
たいのですがどのAPI?クラスを使えばいいのでしょうか?
スクリーンショットを取ってメモリやbitmapで保存できるような物が作
りたいのですが
0548デフォルトの名無しさんNGNG
>>545
手順を書いとく。
たしか、DXの付属サンプルに、その目的そのまんまのコードが
あったような気がする。イルカのやつ。

�@メッシュからVertexBufferとその数を取得。
�A新しいVertexBufferを確保。
�BメッシュからゲットしたVertexBufferをロック。ストリームまたは配列をゲット。
�C新しいVertexBufferへメッシュのVertexBufferをコピーする。
�DメッシュからゲットしたVertexBufferをアンロック。
0549デフォルトの名無しさんNGNG
>548
そうだ、忘れてた。w
書き込むバッファもロック、アンロックしろよ。
0550デフォルトの名無しさんNGNG
DirectSoundではMP3を再生することはできなんでしょうか?
0551デフォルトの名無しさんNGNG
デコードしながらバッファに書き込んでいけば問題なく出来るだろ。
0552デフォルトの名無しさんNGNG
>>550
素直にVideo使えって。
0553デフォルトの名無しさんNGNG
>>551
そんな上等なことできたら初心者板に居る必要ないね

>>552
DirectShowの機能だっけVideoって
0554デフォルトの名無しさんNGNG
Windows Mediaな。
0555541NGNG
>546.548
どうもありがとうございました。
できました。めちゃくちゃ考え違いしていたみたいで・・・。お恥ずかしい。
大変お手数をおかけしました。ありがとうございました。
0556デフォルトの名無しさんNGNG
Audio audio = new Audio("smp.mp3", true);
audio.Play();

Video video = new Video("smp.mpg", true);
video.Play();
0557デフォルトの名無しさんNGNG
>>556
神キタ〜〜〜〜〜〜〜〜〜!!
胡散臭いとか言う次元すら超越してアッサリ実装できますた 多謝。

なんかDirectSoundみたいに
自動でループとかいうステキなメソッド・プロパティないんすね
ここ参照にしてみますた これまたアッサリ実装できますた
http://fe0r.at.infoseek.co.jp/Doc/midi.htm
0558デフォルトの名無しさんNGNG
どこが神なんだ・・・
サンプルからそのままやんか
0559デフォルトの名無しさんNGNG
551や558に比べたら超神杉だろ
文句だけは達者なヤツはウザイだけ
他池
0560デフォルトの名無しさんNGNG
結局、条件のDirectSoundでというのは何だったんだ?
再生できるなら何でもいいのなら、そんな条件を付けなければいいのに、
何のためにDirectSoundを指定したんだ?
0561デフォルトの名無しさんNGNG
音鳴らすってことを全部DirectSoundでできたら楽なのにとか思ったんだろ?
それ以外はダメなんて一切書いてないしAudioあたりで満足したみだいだし放置しとけ
0562デフォルトの名無しさんNGNG
>>561
匂いを出すってことは全部DirectSmellでできることを知らない罠。
0563デフォルトの名無しさんNGNG
>>562
神きたーーーーーーーー!!!!!!!!
DirectSmell使ってみたけどホントに臭い出たよ!!
ようやくレモンの香りのするシューティングが完成しそう
アリガトン!!!

















って時代がいつか来るのかな・・?
臭い出た時点で少なくともクリスクロスは超越するわけだが
■ このスレッドは過去ログ倉庫に格納されています