トップページ⇒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
0705デフォルトの名無しさんNGNG
http://www.microsoft.com/downloads/details.aspx?familyid=B7BC31FA-2DF1-44FD-95A4-C2555446AED4&displaylang=en
DirectX 9.0 SDK Update - (October 2004)
リリースsage。
0706デフォルトの名無しさんNGNG
日本語版まだぁ〜
0707デフォルトの名無しさんNGNG
>>706
一生待ってろ
0708デフォルトの名無しさんNGNG
しもたー さっき2004summer入れたのに・・orz
0709デフォルトの名無しさんNGNG
>>708
気分は夏でも暦は10月なんだなこれが
0710デフォルトの名無しさんNGNG
>>708
つーか、October入れるのにSummerをアンインストールする必要はない、
というかアンインストール「してはいけない」。

だから君は正しい手順を踏んでるよ。

0711デフォルトの名無しさんNGNG
>>704
今回のOctoberでは変化ないな。
変な上がり方はともかく、内容が変わったのに数字に変化ないのはどーかと思うが。
0712デフォルトの名無しさんNGNG
http://www.microsoft.com/downloads/details.aspx?FamilyId=143EF8C6-CFF7-4AF0-8209-1CDF49C58BC0&displaylang=en
再配布パッケージのリンクなんだが、サポートOSにFreeBSD入ってるのはどう思う?
0713デフォルトの名無しさんNGNG
FreeBSD対応は、DirectXの前にウインドウフレームワークの実装の方が先だと思うが。
0714デフォルトの名無しさんNGNG
October = 9.02.3900・・・?
0715デフォルトの名無しさんNGNG
VS.NET2003でやってみたいんですが、やっぱりDirectX SDKが必要なんでしょうか?
200MB超えてるんですが orz
0716デフォルトの名無しさんNGNG
最近はわからんが、雑誌の付録についてたりしないか?
0717デフォルトの名無しさんNGNG
サンプルとかヘルプとか要らないなら再配布パッケージだけでも開発できるが、
やっぱりSDKがあった方がいい。
0718デフォルトの名無しさんNGNG
200MBぐらいテレホで4日あれば落とせるよ
テレホ終了で自動的にモデムが切れるソフト使えば余裕
0719デフォルトの名無しさんNGNG
http://www.microsoft.com/downloads/details.aspx?FamilyId=143EF8C6-CFF7-4AF0-8209-1CDF49C58BC0&displaylang=en
ってSDKでつか?
それともマネージドコードDirectXもインスコされるランタイムでつか?
0720デフォルトの名無しさんNGNG
>>719
ランタイム
0721デフォルトの名無しさんNGNG
トンクス 今までマネージドコードDirectX別にインスコさせてカッタルかったんで助かりまつ
0722デフォルトの名無しさんNGNG
>>721
そういう事見たいやね。

うちの翻訳ソフトの出力:

このダウンロードは、開発者が含むことができる再分配可能なDirectX 9.0cエンド・ユーザーに
彼らの製品を与えます。
この更新は、DirectX 9.0 SDKアップデート(2004年10月)から管理されたコードのための
DirectXアップデートを含みます。

管理されたコードのためのDirectX == Managed DirectX
0723デフォルトの名無しさんNGNG
普通にWindowsUpdateで入るDirectX9.0cだとManaged DirectXで作られたアプリは動かないってこと?
0724デフォルトの名無しさんNGNG
マネージドだいれくとセックルを別にインスコすれば動く
だけどそれがメンドイ

ところで 
DirectX 9.0c Redistributable for Software Developers - Multilingual - 日本語
with updated DirectX for Managed Code (October 2004)
って フレームワーク以外何も入ってない環境でも コレ一つでおK?
0725デフォルトの名無しさんNGNG
DirectXで全画面表示にして最小化されたりとかして
元に戻してもおかしくならない方法って結構複雑にならない?
もっと簡単に出来ないのかな。
0726デフォルトの名無しさんNGNG
最大化できないようにウインドウサイズを固定するんじゃダメなのか?
0727デフォルトの名無しさんNGNG
>>726
いや、通常は全画面(画面の解像度とか変えたりするほう)で表示してるけど、
Alt+Tabキーとか押されたら最小化されちゃうから
そのときに描画処理やらないようにするための処理が結構面倒で
何とかならんもんなのかなぁと。
0728725NGNG
スマソ。
今書いてみたらあんまり面倒じゃなかった。
0729デフォルトの名無しさんNGNG
全画面モードにするとデバッグ中に開発環境が「小さくなる」のは痒い。
0730デフォルトの名無しさんNGNG
聞いて解決したんなら、自己解決でも
何をしたか書こうな。
0731デフォルトの名無しさんNGNG
>>730
面倒だと思ったことをやってみたけど
実際は面倒じゃなかったってだけのことだったんで
書かなくてもいいかなと思ったんだけど書いとくか。

bool deviceLost = false;をどっかに置いといて
レンダリングメソッドにて

public void Render()
{
    if ((deviceLost) || (Form.ActiveForm != this))
    {
        System.Threading.Thread.Sleep(100);
    }

続く
0732デフォルトの名無しさんNGNG
    if (deviceLost)
    {
        try
        {
            device.TestCooperativeLevel();
        }
        catch (DeviceLostException)
        {
            return;
        }
        catch (DeviceNotResetException)
        {
            device.Reset(device.PresentationParameters);
            OnDeviceResizing(device, new CancelEventArgs());
        }
        deviceLost = false;
    }

    device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, options.Background, 1.0f, 0);

    //ここで描画処理

    try
    {
        device.Present();
    }
    catch (DeviceLostException)
    {
        deviceLost = true;
    }
}
0733デフォルトの名無しさんNGNG
Direct3DのSpriteってDirectDrawでDrawするのとは根本的に違うのでしょうか?
それともDirectDrawをDirect3Dから使えるようにしたものでつか?
0734デフォルトの名無しさんNGNG
Direct3DのSpriteはポリゴンにテクスチャを貼り付けたものをバックバッファへ書く。
DirectDrawのDrawはオフスクリーンサーフェスからバックバッファへ転送する。

まあDirect3Dのほうはポリゴンだから変形が楽だとか
演算やシェーダを使ってエフェクトをかけたりすることもできるというあたりかなり高機能
0735デフォルトの名無しさんNGNG
Sprite.Drawのcenterパラメータってなんか意味あるの?
回転するパラメータもないのに。
0736デフォルトの名無しさんNGNG
>Sprite.Drawのcenterパラメータってなんか意味あるの?
何を言ってるんですか意味ありまくりですよあなた

>回転するパラメータもないのに。
Draw2DやRotationZで回転するときの中心補正点になるんだよ

使わないなら Vector3(0,0,0)でも指定しとき
0737デフォルトの名無しさんNGNG
>>736
ありがとうございました
0738デフォルトの名無しさんNGNG
ところでスプライトって
RotationXやRotationYは使える?
漏れのダメポPCだとRotationZしかつかえない
ほかは表示がヘンチクリンだ
0739デフォルトの名無しさんNGNG
>>738
こっちでも表示がヘンチクリンだ。
0740デフォルトの名無しさんNGNG
ちょっと教えて下さい。
Vector3とMatrixの積を返すメソッド。
ヘルプで探したのですが見つからなかったので…。
0741デフォルトの名無しさんNGNG
メソッドでやってもいいんだが
掛けるだけじゃ出来なかった?
Vector3 v = 〜〜〜〜;
Matrix matrix = 〜〜〜〜〜〜;
v = v*matrix;
0742たけしNGNG
DirectX 9.0 SDK Update (October 2004)になって、Spriteの扱い方がかわって、スプライトの2D描画がうまくいきません。

まずsprite.Begin(SpriteFlags.None);とsprite.End();が必要になったのはわかりました。

ですが、Draw関数を以下のように、体力の黄色と赤のゲージを描画するコードだと、1本で体力を表したいのに、上下に2つ画像が描画されます。
sprite.Draw(
barTEX,
new Rectangle(0,0,(hero.energy>0)?hero.energy:0,16),
new Vector3(0,0,0),
new Vector3(10,10,0),
Color.White);
sprite.Draw(
barTEX,
new Rectangle((hero.energy>0)?hero.energy:0,16,300,32),
new Vector3(0,0,0),
new Vector3(10+hero.energy,10,0),
Color.White);

Draw2Dは、
public void Draw2D(Texture, Point, float, Point, Color);
だけうまく描画されましたが、他は描画さえされません。

以前のバージョンのコードを、ちょっと変更してプログラミングしただけなので、それがまずいのかもしれませんが、どうやればうまくスプライトのDrawとDraw2Dを描画できるでしょうか?
0743デフォルトの名無しさんNGNG
http://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=17601
0744デフォルトの名無しさんNGNG
Microsoft.Samples.DirectX.UtilityToolkitってなんどすか?
0745デフォルトの名無しさんNGNG
>>744
プロジェクト開いて検索汁
0746デフォルトの名無しさんNGNG
>Spriteの扱い方がかわって、スプライトの2D描画がうまくいきません。
以前のバージョンではちゃんと表示されてたのか?
0747たけしNGNG
SDK2003のSprite.DrawではRectangleが(左,上,右,下)だったのが、SDK2004では(左,上,幅,高さ)に変わったようです。
これでうまくいきました。
0748デフォルトの名無しさんNGNG
よし!がんばれ たけし!!
0749デフォルトの名無しさんNGNG
次はDecember2004である、に一票。
0750デフォルトの名無しさんNGNG
しかもまたスプライトの仕様が変わるに一票
0751デフォルトの名無しさんNGNG
と思ったらフェイントでOctober-II 2004 緊急リリース!、に一票。
0752デフォルトの名無しさんNGNG
かったるいから
しばらくの間
2004夏で我慢することにした
いちいち仕様カエルナヨ・・MSさんよぉ
0753デフォルトの名無しさんNGNG
>>752
別にそれで構わんが、2004夏でManagedなら
TextureLoader.FromFileには気をつけろよ。
このせいで2004十月が出たようなもんだから。
0754デフォルトの名無しさんNGNG
>>753
Managedで2004夏使ってなおかつTextureLoader.FromFileを使ってるんだが
何がどうまずいの?
0755デフォルトの名無しさんNGNG
>>754
使ってて気づかないの?もしかしてエラー出力もチェックしたことないとか?

せっかくキーワードがそのまま書かれてるんだからちょっとは調べろよ。
http://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=14982
0756デフォルトの名無しさんNGNG
C#でDirectXの入門サイトでお勧めのところを教えてください。もしくは書籍。

やりたいのは2Dの処理です。パズルゲームとかトランプゲームみたいなのを作りたいと思ってます。
(わざわざDirectXでやるな、といわれそうですが・・・)

いろいろ探してみたんですが、C++で解説してたり、3Dを扱ってたりでお手上げです。
いちおうあげておきます
0757デフォルトの名無しさんNGNG
そうやって他人が何とかしてくれるだろうと甘い考えを持った末路は、



グビチョン
0758デフォルトの名無しさんNGNG
ヘルプとサンプルでどうにかなるんでない?
やりたいことが2Dでも、3Dは勉強しなきゃならんと思う。
DXSDK\Samples\Managed\Direct3D\Tutorialsにあるサンプルを1から6までやるべし。
0759デフォルトの名無しさんNGNG
>>758
うむむ、なかなか読み応えありますね
DirectXで2Dをやろうとすると、DirectDrawよりもDirect3D.Spriteを使ったほうが良い場合が多いそうですね(理由はわかりませんが)
とりあえず3Dに挑戦してみます。どうもでした
0760デフォルトの名無しさんNGNG
仕様変更で面倒ばかり起こすSprite系には何のメリットもない。
普通に頂点を作ってテクスチャを張るべし。
0761デフォルトの名無しさんNGNG
>>760
ほほぅ
肝に免じておきます
0762デフォルトの名無しさんNGNG
DirectDrawとDirect3Dでは難しさが・・・
0763デフォルトの名無しさんNGNG
2Dの場合、Direct3DはDirectDrawより少し遅い
2004Summerでまたスプライト関数の引数が変更したらしいな
0764デフォルトの名無しさんNGNG
GDI+とどっちが早いですか?
0765デフォルトの名無しさんNGNG
GUI+使うなら DirectDrawをオススメします

3DSpriteは仕様変更がウンザリなのと
ちょっと古いPCやドライバの更新もできないような
ヘタレ君の環境だとマトモに表示されないケースが多いのがマズー
0766デフォルトの名無しさんNGNG
>>765
GUI+なる謎の物体を突然持ち出す君の方がマズー

君ってチンカス以下だね
0767デフォルトの名無しさんNGNG
>766
つまんね


C#にもC++並のサンプルつけてくれMS
VBに至ってはサンプルナッシングかよ
かわいそうに
0768デフォルトの名無しさんNGNG
>>767
オマエモナー
0769デフォルトの名無しさんNGNG
ぶっちゃけVBいらね
0770デフォルトの名無しさんNGNG
ぶっちゃけC#いらね
0771デフォルトの名無しさんNGNG
わざわざ無理にC#でやろうとしなくていいよ。
C++とかのほうが情報多いんだし。
0772デフォルトの名無しさんNGNG
でも、未開拓の言語って触るの面白いんだよ。
……これが仕事でなければ。
0773デフォルトの名無しさんNGNG
枯れた言語は掲示板のレスもツマンネ奴ばっかりだしな
0774デフォルトの名無しさんNGNG
つまりC#も枯れた言語というわけか。
0775デフォルトの名無しさんNGNG
C#のことは気にせず、
黒い箱にスパゲティ入れて遊んでな。
0776デフォルトの名無しさんNGNG
C#でMDX使い始めたらC++でDirectXは使いたくなくなった
0777デフォルトの名無しさんNGNG
>>776
M$の罠にかかった香具師がここにも一人。もうだめぽ。
0778デフォルトの名無しさんNGNG
>776
そんなに楽?すぴーどなどもよろ。
0779デフォルトの名無しさんNGNG
楽そうとかいう理由で使うやつは初心者。
C++のほうがパフォーマンスいいんだから、
そっちで無難にやっておけよと。
0780 ◆Rk6dvtD5gI NGNG
自分ではパフォーマンスの測定もろくにせず
一般的な文言を鵜呑みにして他人をも洗脳しようとする>>779の方がよっぽどクズ。


いろんな系統のプログラムで測定してみたが、
俺の環境ではManagedによるパフォーマンス低下は大体0〜15%。

当たり前のことだが、GPUよりCPUを酷使するプログラムでは
パフォーマンスはネイティブに比べ大きく低下する。
逆にパフォーマンスがほぼGPUでの処理のみに依存しているようなプログラムでは、
体感的にはもちろん、数値的な差もほとんど確認できない。

ただし、MDXが提供するクラスの中には、単なる状態取得プロパティ・メソッドに見せかけて、
実は呼ばれる度にオブジェクトを新規に確保→コピーを繰り返すという、なんとも迷惑なのがかなり多くある。
また最近のバージョンでは減ってきたとはいえ、>>755みたいなバグが未だ潜んでいる可能性は大いにある。

Managedでパフォーマンスを重視するなら、ネイティブでの開発経験はもちろん、
Managedメソッドとそれに対応するネイティブメソッドとの関係を詳細に把握しておくことが必要。

逆にManagedで開発するメリットとしては、やはり圧倒的な開発効率がある。
.NET Frameworkが提供する豊富なライブラリを利用できる上、
対象の説明まで表示してくれるインテリセンスなどIDEのサポートも非常に便利。
上では欠点ばかり書いてしまったが、
MDXのクラスはManagedの流儀に併せてきれいに再構成されているし、
ほとんどのクラスがMarshalByRefObjectから派生しておりAOP的なプログラミングも可能。


何にでも言える事だが、そのデメリットを充分に理解しているのなら、
そのメリットを生かすためにそれを使うことには躊躇しなくてもよい。

俺はもちろんネイティブDirectXも使うし、Managed DirectXもありがたく使わせてもらっている。
0781デフォルトの名無しさんNGNG
コピペ乙
0782デフォルトの名無しさんNGNG
>>772
>でも、未開拓の言語って触るの面白いんだよ。
ここは同意出来るが、C#が未開拓かと言えばそうでもない。
いつものように既存のものを名前変えただけだろ。

0783デフォルトの名無しさんNGNG
変なのが紛れ込んできたな。
どこかにここのリンク貼られたのか?
0784デフォルトの名無しさんNGNG
>783
へんなのってこれか?>780
至極まっとうな意見だが。
0785デフォルトの名無しさんNGNG
コピペじゃないと思われ
0786デフォルトの名無しさんNGNG
すべてのぎろんが>780見たいな物だったらいいスレができると思われ
0787デフォルトの名無しさんNGNG
起動が遅くて糞糞言われてるんだからネイティブもポジティブもないだろう。
0788デフォルトの名無しさんNGNG
>ネイティブもポジティブも
つりなのかどうなのか微妙なところだ
0789デフォルトの名無しさんNGNG
やっぱり780の意見は素晴らしいと思われ
0790デフォルトの名無しさんNGNG
>>788
微妙だな。
不覚にも微妙にワロテシモタ
0791デフォルトの名無しさんNGNG
チップ依存が吸収できる3Dエンジンなら、パフォーマンスなんかドブに捨ててもいいでつ。
趣味でプログラムしているうちが華だよもう (´・ω・`)
0792デフォルトの名無しさんNGNG
趣味でプログラムしてる漏れは勝ち組


といった、クソ厨のような発言をオマイにささげてみるテスト(debugビルド)
0793デフォルトの名無しさんNGNG
全然面白くない
0794デフォルトの名無しさんNGNG
俺的には、C#でDirectXは面白い。
0795デフォルトの名無しさんNGNG
面白いんだが
.netフレームワーク + DirectX + ManagedDirectX を
インストールさせなきゃならんのが
イイ手はないですか兄さん
0796デフォルトの名無しさんNGNG
LongHormをインストールさせるがよろ氏。
0797デフォルトの名無しさんNGNG
>>796
全然面白くない
0798デフォルトの名無しさんNGNG
>LongHormをインストールさせるがよろ氏。
もうβ出たっけ?

>全然面白くない
面白くする努力するなり
他へ逝くなりご自由に
0799デフォルトの名無しさんNGNG
ここで>>780氏による統括きぼん
0800デフォルトの名無しさんNGNG
真投げは駄目駄目
0801デフォルトの名無しさんNGNG
じゃ、じゃあ>>800氏によるすばらしい意見きぼん
0802デフォルトの名無しさんNGNG
今度の
0803デフォルトの名無しさんNGNG
衆議院選挙は
0804デフォルトの名無しさんNGNG
なぁ、C#+DirectXで作ったアプリを配布する時って、
.NET再頒布パッケージ入れてMDXランタイム入れてもらえば良いんだよな?
■ このスレッドは過去ログ倉庫に格納されています