トップページ⇒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
0336デフォルトの名無しさんNGNG
>>334
C++にはないのにC#にはあるメソッドは悲惨でつねほんと
ヘルプがダメポすぎなのにC++のほうは参照できないといふ・・

>>335
他のピノキオが脊髄反応するのような
スレ違いな話題振るのやめましょうね
0337デフォルトの名無しさんNGNG
MCのラッピングとC#からの利用は、すれ違いではないと思うのですが。
使いやすいラッパーを作っていければ、開発が楽になります。
C用のライブラリはたくさんあるのに、
C#は今のところ、そういったものを公開している人がいないところが泣き所です。
0338デフォルトの名無しさんNGNG
C++で出来る人は、ここでも言われているとおり、C++だけで作ってるから、
わざわざ.NET用のラッパーを作る奇特な神はいないのだろう
0339デフォルトの名無しさんNGNG
たとえそういった物があったとしてもここでそんな話をすれば
スレ違いだということで荒れる原因になるという。
全てがC#でなければスレ違いというローカルルールがいつ出来たのかは知らないけど。
0340デフォルトの名無しさんNGNG
C#でDirectXを扱いたいだけなのに、やれC++では簡単だとか、
やれC++のヘルプを見れだとか言うレスが付くからなんじゃね?

まぁ、あれだ。C#でDirectXを扱うのが困難な状況を改善しない
MSが諸悪の根源なんじゃねーかなぁと。
0341デフォルトの名無しさんNGNG
>>337
.NET FrameworkにDirectXを叩くクラスが無いのが問題だと思う。
別にラッパー作りたい訳じゃないから。
0342デフォルトの名無しさんNGNG
規格的に配列などのメモリーの扱いが違うから、
直接叩くようにするのは無理っぽい。
いっそC#にもアンマネージの直接アクセス出来る機能を付けるとか。
どうせDirectXを使った時点で移植なんか無理なんだし。
0343デフォルトの名無しさんNGNG
なんでManaged微妙にちがってんの?DirectXの内容自体は同じでないの?
0344デフォルトの名無しさんNGNG
全てがそのまま移植できるわけではないから。
保護された安全な場所から、外の戦場を制圧する武器を作っているような状態で、
出来る限り現地で行動するのと似せて作ってあるけど、やっぱり限界がある。
0345デフォルトの名無しさんNGNG
>>342
それやるとC#の意味ねぇと思うがどうか。

元々C#もDirectXも出所は同じなんだから、いっその事
過去の互換性を捨ててでもDirectXのマネージコード化
を進めそうな希ガス。

DirectX10の話を聞かなくなったから、今度はマネージ
コードだと言われても驚かないな俺は。
0346デフォルトの名無しさんNGNG
10まで2年待たなければならないけど、そこまで気長に待つのもどうかと。
0347デフォルトの名無しさんNGNG
XBOX2では、DirectXに代わる開発フレームワークを用意するって
話をどっかのサイトで読んだんだが、これがDirectX10の代わりに
来るんじゃないのかね?
0348デフォルトの名無しさんNGNG
コンシューマーをマネージ対応コードで作るとは思えないが。
0349デフォルトの名無しさんNGNG
XNAのことか?
あれはむしろ、Windows、WindowsMobile、XBox用のソフトがクロス開発できる
プラットフォームかなと見たが。
0350デフォルトの名無しさんNGNG
>>349
それだ。

.NET FrameworkがWindowsとWindowsMobileのソフトウェア開発の
ハードルを下げたように、今度はDirectXのマネージ化がくるんじゃ
ねーかなと。
0351デフォルトの名無しさんNGNG
>>350
マネージ化してるってば。
0352デフォルトの名無しさんNGNG
していなかったら、そもそもこのスレが存在していない可能性が高い。
0353デフォルトの名無しさんNGNG
p://www.watch.impress.co.jp/game/docs/20040706/xna.htm
これを見た感じ、XNAはマネージ以上にハードル低いように読める。
0354デフォルトの名無しさんNGNG
誰でも簡単にというだけで、具体的にどれだけ簡単なのかまるで説明されていない。
描画や演算ライブラリが一通りそろっていても、それをイメージ通りに動かす上で、
そのイメージをどうやって伝えるのか、それが誰でも出来るほどに簡単にするすべは何なのかがさっぱり。
HTML作成ツールを例に挙げているが、あれだって配色や素材の問題もあるし、
ツールを使ったからと言ってセンスのいいデザインになるとは限らない。
また多機能にしようと思えば、ツールで補える範疇を超える。
小規模で定型に絞り、限られた範囲という条件で簡単だというのなら、
今までと大して変わるところはない。
0355デフォルトの名無しさんNGNG
物理エンジンや3DエンジンのAPIをMSが用意してそれの交換を楽にしてやるよって話じゃねーの
レゴブロックみたいに上手くいくかは知らんけど物理エンジン、3Dエンジン、シェーダーは挿げ替えできたほうがいい
0356デフォルトの名無しさんNGNG
>>353
ここで言ってる理想通りになったらそれこそスバラシイだろうけど
もし仮に実現したとしてもDirectXをコネコネしながら
ゲーム作ったって経験は生きそうな予感
出るの待ってる暇があったら必死こいてコード書いてたほうがよさげ
0357デフォルトの名無しさんNGNG
>>356
DirectXをコネコネしながらゲーム作ったって経験は活きるよ。

だけど、多くのゲーム作りたい人はゲームを作りたい訳であって、
DirectXをコネコネしたい訳じゃないよな。仕方なくコネコネ
しているだけでさ。

そう言う意味では、本来のゲーム作り以外の部分のハードルが
低くなる事には意味がある。

無論、現状では実現されてない訳だから、それを待ち侘びるだけ
ではなく、現状でやれる事をやってくってのは大事だと思うけど。
0358デフォルトの名無しさんNGNG
とりあえず、SDKドキュメントのチュートリアルはなぞってみた。
D3Dを使っての2D表示(要はビルボード)をいろいろいじってみたいんだが、
sampleディレクトリにある奴はどれも高度っぽくて参った。
将来的には簡単なシューティングゲームみたいな物を作ってみたいんだけど、
こんな文献が参考になるよーっていうのがあったら教えていただきたい。

…ってスレ違いですか?(´・ω・`)
0359デフォルトの名無しさんNGNG
最近そのままシューティングゲームを作る本が出たな。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4797327316/
0360デフォルトの名無しさんNGNG
>>359
やっぱりというかなんというか
C#本じゃないのが残念
立ち読みしてきまふ
0361デフォルトの名無しさんNGNG
>>359
アルゴリズム本であってシューティングを絡めた言語入門書じゃないぞ
0362358NGNG
>>359
その本買ったんだけど、ガチガチのアルゴリズム本でした。
いや、承知して買ったんですが。
面白かったんですが、入門書にはならず。
C++のソースついてるけど、規模が大きいから
ソースなぞりながら理解していく、ってのが難しそうなのであきらめました('A`)
0363デフォルトの名無しさんNGNG
ネット対応3Dシューティング(FPSなど)のアルゴリズム本でないかな。
0364デフォルトの名無しさんNGNG
コンパクトなシューティングのソースならゲ製作技術板にイパーイある
C++とDelphiばっかりだけど
0365デフォルトの名無しさんNGNG
ColorKey.ColorSpaceHighValu ってARGB値ですか?
透過しなくて困っています。
0366デフォルトの名無しさんNGNG
久々の質問だ
気合入れて答えろよおまいら

俺?

すまん、わからん
0367デフォルトの名無しさんNGNG
>>365
ソースのサーフェスのピクセルフォーマットの通りに指定する。
んでもいまどき使う、それ?
0368365NGNG
>367
え、いまどきは何を使うのでしょうか。
0369365NGNG
いろいろ調べて試してみましたが、
367の発言だけで巧くいくほど理解していないようです。
ソースのサーフェスのピクセルフォーマットは
どこで設定しているのでしょうか。

現在のソースは以下のようになっています。

SurfaceDescription description = new SurfaceDescription(); //
description.Clear(); // Clear out the SurfaceDescription structure.
Surface bmpSurf = new Surface("filename" description, draw); // .
ColorKey ck = new ColorKey(); // Create a new colorkey.
ck.ColorSpaceHighValue = ck.ColorSpaceLowValue = Color.Green.ToArgb(); //左上をcolorkey
bmpSurf.SetColorKey(ColorKeyFlags.SourceDraw, ck); //
0370デフォルトの名無しさんNGNG
う〜ん……

> ck.ColorSpaceHighValue = ck.ColorSpaceLowValue = Color.Green.ToArgb(); //左上をcolorkey

Color.Green.ToArgb()で取るより、直接サーフェイスから取った方が良くない?
せっかく、「左上をcolorkey」という仕様になっているんだから。
あと、サーフェイスってビデオカードの状態によって誤差が出そうな気がする。

DirectDrawが廃止される以前にC++でいじってた頃の記憶なので、はずしてたらスマソ。
0371365NGNG
コメントは抜き忘れです。
本当はbmpに読み込んでbmp.GetPixel(0,0).ToArgb()をやってました。
でもこれもだめらしい。
サーフェイスから直接、ってどうやってとるんですか?

0372デフォルトの名無しさんNGNG
>>371
Surface を Lock して、左上と思しきアドレスから、1ピクセル分と思しき
サイズ (2バイト〜4バイト) だけデータを読んで、RGB部分を取り出して使う。

たぶんこんな感じ。
byte [] pixels = bmpSurf.Lock();
switch (description.PixelFormat.RgbBitCount + description.PixelFormat.AlphaBitDepth ) // RGB と仮定
{
 case 15: val = pixels[1]*256 + pixels[0]; break;
 case 16: val = pixels[1]*256 + pixels[0]; break;
 case 24: val = (pixels[2] * 256 + pixels[1]) *256 + pixels[0]; break;
 case 32: val = ((pixels[3] * 256) + pixels[2] * 256 + pixels[1]) *256 + pixels[0]; break;
}
val = val & (description.PixelFormat.RBitMask | description.PixelFormat.GBitMask | description.PixelFormat.BBitMask);

>え、いまどきは何を使うのでしょうか
Direct3D を使ったほうが情報も多いしラクだと思います。
しょぼいビデオカードでも VSync に厳密にあわせられてテアリングしないのは良いけど > 昔のDDraw
0373デフォルトの名無しさんNGNG
>>372
あ、これが済んで pexels が無用になっらた Unlock を忘れずに。
0374365NGNG
ありがとうございました。

確かにDIrect3dのほうが情報が多いんですよね。
少し3Dもやってみます。

本もどかどか買ったことだし……。
0375デフォルトの名無しさんNGNG
 最近、DirectXを始めたので、周りに聞く人もいないので、質問させてください。
おばかな質問かとバカにされるかもしれませんが・・・。本当に分からないので。
Direct3DとDirectDrawを同時に使うということはできるものなのでしょうか?
 Direct3Dでオブジェクトを表示させている画面の上に、スプライトでテクスチャを貼るということは可能でしょうか?
 本とかサイトを見る限り、板ポリゴンの上にテキスチャを張っているサンプルが多いのですが・・・。
 参考になるページとかありましたら、お教えください。よろしくお願いします。
0376デフォルトの名無しさんNGNG
>>375
>Direct3DとDirectDrawを同時に使うということはできるものなのでしょうか?
不可能
>Direct3Dでオブジェクトを表示させている画面の上に、スプライトでテクスチャを貼るということは可能でしょうか?
一部意味不明な部分があるがポリゴンとスプライトの混在は可能
>参考になるページ
Cマガでたまに組む特集ぐらいしか取っ掛かりがないよね
0377デフォルトの名無しさんNGNG
そもそもスプライトなどという機能は存在しないので、無い物は混在できない。
0378デフォルトの名無しさんNGNG
>>375
変換済み頂点を使った板ポリゴンで十分だから、いまさら DirectDraw の
スプライトを使う人はほとんどいないと思います。

お金儲けをしようと思って、自販機のお釣り帰ってくるところを探し回る人と
同じくらいのレア度だと思いますよ。
0379デフォルトの名無しさんNGNG
C#からDirectDrawは使えないだろ?
0380デフォルトの名無しさんNGNG
C#からDirectShowは使えますか?
0381デフォルトの名無しさんNGNG
>>379
何の問題もなく使えるが、お前は何を言っているんだ?
0382デフォルトの名無しさんNGNG
DirectX7のころはDirectDrawサーフェイスに描画した画像を
テクスチャに指定することができたみたいですが
DirectX9になってからはできなくなったというのはホントでつか?
仮にホントだとして同じような機能を実現するにはどーしたらよいのでしょうか?
0383デフォルトの名無しさんNGNG
うそです。
0384デフォルトの名無しさんNGNG
無くなった機能をどうしても使いたいのなら、古いバージョンで開発する。
その為の互換性でもあるんだけどな……。
0385デフォルトの名無しさんNGNG
>>382
テクスチャに描画すればいいじゃん。
0386デフォルトの名無しさんNGNG
>>385
その方法がわからないのかと思われ
0387382NGNG
>>385
殺り方とかのってるHPはないんでしょうか?
0388デフォルトの名無しさんNGNG
>>387
殺り方藁田
0389デフォルトの名無しさんNGNG
ageてみますね・・・
0390デフォルトの名無しさんNGNG
>>387
GetDC して GDI で書いてもいいし、LockRect してバッファに直接書いてもいいし。
DirectDraw の頃とたいして変わってないと思うけど・・・
0391デフォルトの名無しさんNGNG
>>387
これは?
http://www.microsoft.com/japan/msdn/directx/japan/dx9/mxd10.asp
0392387NGNG
>>391
アンタ、スゲーいい香具師だな
メガトン級サンクスコ
0393デフォルトの名無しさんNGNG
質問です。
うまく伝えられるかどうか分かりませんが・・・。

 Direct3Dのシーン上で二つのカメラを扱うことは
できますか?一つのオブジェクトを異なる複数の視
点から表示したいと思っています。
 よくゲームとかで、画面の隅っこの方にキャラク
タを上から見たようなの(地図みたいなの?)が表
示されるのってありますよね?そういうのを作りた
いと思うのですが、どうしていいのか、さっぱり、
分かりません。何かアドバイス等いただけたらと思
います。宜しくお願いします。
0394デフォルトの名無しさんNGNG
ビューの設定を変えて表示したい数だけレンダリングすればいい。
0395デフォルトの名無しさんNGNG
>>393
266をまとめた116の「ウインドウの一部に表示したい」
って奴を応用してカメラの位置かえて再描画
0396駄目PGNGNG
すみません。
C#ビルダー使いはじめたのですが、そもそも言語仕様を詳しく解説したサイト
ありませんか?とくにCとの比較 違い
Cでこうしたい時は、c#ではこう書く みたいな...

いきなり構造体の中に配列作ろうとしてエラー
#define <(これは無いらしいのはわかった、正確にはあるけと用途が違う)

useing ...

const int MAXVIEWPORT =8; <ここでは宣言できないらしい

amespace hoge
{
 const int MAXVIEWPORT =8; <ここでも宣言できないらしい
 #define MAXVIEWPORT =8;<これも駄目らしい #defineはこういう使い方ではない
struct dRECT{
 int T,L,W,H;
}
struct SaveFORMAT {
 int ClientSizeX,ClientSizeY;
 dRECT RECTS[MAXVIEWPORT];<こんな使い方したいけど全文がエラーだから駄目
 dRECT RECTS[7];<こういう書き方もだめ orz...
};
public class WinForm : System.Windows.Forms.Form
{
}
グローバルな定数をどうやって宣言するのだろう。
ある程度C++も理解しているが、かえってその違いにクラクラしてますorz.. 
0397デフォルトの名無しさんNGNG
C♯相談室 Part16
http://pc5.2ch.net/test/read.cgi/tech/1087297504/
0398デフォルトの名無しさんNGNG
>>396
.NET SDK付属MSDNライブラリ(無料)
0399デフォルトの名無しさんNGNG
C++移転組ならこれ便利
ttp://black.sakura.ne.jp/~third/programming/cs/cs.html
0400デフォルトの名無しさんNGNG
.NET板
http://bbs.2ch2.net/dotnet/
0401駄目PGNGNG
>>387 399
有難う。これから調べます!
0402デフォルトの名無しさんNGNG
誰でも簡単にって・・・w
万能な開発ツール作ってコードの自動出力付ければいいだけだと思うがねw

XNAには期待してないからDirectX10だせや
また一から覚えなおすのはやだから
0403デフォルトの名無しさんNGNG
そろそろ俺の出番かな?
0404デフォルトの名無しさんNGNG
関係無いが、池袋に「俺の出番」というラーメン屋がある。
0405デフォルトの名無しさんNGNG
ダレでも簡単 ってヤツに限って 誰でも簡単にいじれない代物なんだよね・・(にや
0406デフォルトの名無しさんNGNG
関係ないが、小便少女もいる。
0407デフォルトの名無しさんNGNG
申し訳ありません。質問です。
自分で作ったフォントをインストールさせずにDirectFontで使用する事はできますか?
0408デフォルトの名無しさんNGNG
申し訳ありません。質問です。
印刷業界を崩すために98年MicroSoftが放つとどめの一撃。
AdobeのAcrobat実用段階システムにしてMSでDirectFontと呼ばれていたプロジェクトって何ですか?
0409駄目PGNGNG
いろいろ調べたけど明確な答えが見つからないなぁorz..

構造体の中に配列すら単純に記章できないのでしょうかorz..
サンプル見てもc#の得意な事ばかり強調されているけど、C++からの移植について
ベーシックな部分を説明しているところがない...

構造体にコンストラクタって(もちろん便利ではあるのだけど)
構造体のポインタをファイル関数に渡して、メモリイメージを保存したい。
そんな場合には、無用な機能だし

誰か明快なお答えをorz..

#define wm_mycommand = 1111;

Cでかかれているこんな定義は何処ですればいいのだろう。
0410デフォルトの名無しさんNGNG
>>409
こちらで聞いてみれば?
ttp://pc5.2ch.net/test/read.cgi/tech/1062421817/l50
0411デフォルトの名無しさんNGNG
こっちのがHOTかも
ttp://pc5.2ch.net/test/read.cgi/tech/1087297504/l50
0412デフォルトの名無しさんNGNG
C++頭でC#を使って開発してもメリットないだろうな。
0413デフォルトの名無しさんNGNG
そもそもCでも#defineは別の物に置き換えるのが推奨されているし、
その書き方はC#側と同じになる訳なんだが。

つまりC#以前にCが理解できていないということなのだから、
まともに移植など出来ようはずがない。
0414デフォルトの名無しさんNGNG
public const = wm_mycommand = 1111;
0415414NGNG
まちがいた
public const int wm_mycommand = 1111;
0416デフォルトの名無しさんNGNG
DEFINT A-Z
0417デフォルトの名無しさんNGNG
工学社から出てるこれらの本は参考になるのかな?

http://www.kohgakusha.co.jp/books/detail/4-87593-419-X
http://www.kohgakusha.co.jp/books/detail/4-87593-437-8
http://www.kohgakusha.co.jp/books/detail/4-7775-1043-3
0418デフォルトの名無しさんNGNG
>>417
バカには参考になるんじゃないの
0419デフォルトの名無しさんNGNG
>>418
それが理解できないお前は何者なんだろうな。
0420デフォルトの名無しさんNGNG
なんだろ、この思考力の欠片も感じられない最低品質の煽りはw
0421デフォルトの名無しさんNGNG
お前もな。
0422駄目PGNGNG
>>415
すみません
ネームスペースの外に宣言できますか?
でなければクラスの外に宣言できますか?

クラス内でしか宣言できないとなると 
クラスで使用したい構造体の為の宣言が出来ないのですがorz...


0423デフォルトの名無しさんNGNG
>>422
あのさ(←書き方が乱暴で悪いけど)、世の中には C# で必要な struct を定義して
Win32 API を読んだり、あるいは単に C# で struct を使ったりしてる例が山ほどあるでそ。

喪前のやろうとしていることは、どれほど「特別な」ことなんだ?
誰でも当たり前のように出来るのに、422には出来ない、という場合には、
「できますか?」って質問するんじゃなくて、何をやろうとしているのかを具体的に書いて、
「やり方を教えてください」って頼んだ方が良いと思う。
0424デフォルトの名無しさんNGNG
>>423
「できますか?」って質問に対しては、
単純に
「できます」
「できません」
って答えてあげればいい
0425デフォルトの名無しさんNGNG
ばーか
0426潜伏していた1NGNG
>>422
こうするんです
public class ConstValueList
{
 public const int a ;
}
class Hoge2
{
 void func() { System.Console.WriteLine( "{0}" , ConstValueList.a ) ; }
}
C++と違いconst はクラスのメンバであってインスタンスのメンバーではありません。
文法こそC++と似ていますが、中身は似ても似つきません。
なので、グダグタ言わず色々試してみるべし。

もう一つ、構造体の中身を書き出すのは、ISerializable を使うのがC#流のようです。
あんまり良く分かっていないのですが、こうする事でファイルを仲介してprivateメンバへの
アクセスを防止してセキュアなアプリを構築しやすくなっているようです。
また簡単にXMLとして保存もできるようになります。
ちなみに、直接バイナリで保存できる方法があったら、誰か教えてください、僕も知りたいです。
0427デフォルトの名無しさんNGNG
>>417
初めてDirecTXにふれるなら参考になるはず。
俺はその系統のDirectX8のヤツ買ったけどかなり役に立ったよ。
0428デフォルトの名無しさんNGNG
DirecTV
0429デフォルトの名無しさんNGNG
まずは、オブジェクト脳を作るんだ。
0430デフォルトの名無しさんNGNG
そもそも、>>422は
なぜわざわざC#でやりたいんだろうか・・・。
C++で無難にやったほうが
情報量も多いし、パフォーマンスもいいのに。
0431デフォルトの名無しさんNGNG
>430
開発時間が圧倒的に短いから。

> 情報量も多いし、パフォーマンスもいいのに。

Managedによるパフォーマンスの低下は約一割。
ケース倍ケースだが、C#を選ぶ理由は充分にある。
0432デフォルトの名無しさんNGNG
生産性がいいわりには苦労してるようだが……。
0433デフォルトの名無しさんNGNG
>>431
SDKのサンプルを見る限りは、軒並み一割どころではない差が付いているが、
何をもって一割なんだか意味不明。
0434デフォルトの名無しさんNGNG
>>431
C++からの移行だとそうでもないよ、もともとDirectXはC++を想定して作られているので
C#のクラスとして考えるとやり方のキテレツな方法が仕様中に詰まってます。
メモリーの構造がイメージできないと理解に苦しむような仕様があります。
パフォーマンスもかなりトリッキーな事をしないと一割は難しい。
誇大広告は鵜呑みにするべからず。

それでもGDI+よりかなり面白い事ができるので、気に入ってはいますけど・・・
0435anonymousNGNG
あるWindowsアプリケーションが、一連の動作の中で
使用するポート、プロトコルについて
調べるソフトウエア または、方法はないでしょうか?
■ このスレッドは過去ログ倉庫に格納されています