トップページgamedev
152コメント55KB

SlimDXについて語ろうぜ

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2010/01/31(日) 10:41:21ID:uYVfFOYk
公式
http://slimdx.org/

日本語の解説
http://mainori-se.sakura.ne.jp/slimdxwiki/

SlimDX は、.NET Framework に対応した言語(C#、VB.NET など)を使って
DirectX アプリケーションを開発することができるオープンソースのライブラリ(DLL)です。
0002名前は開発中のものです。2010/01/31(日) 11:11:12ID:P37elB52
で、どうすんの。
0003名前は開発中のものです。2010/01/31(日) 11:31:50ID:uYVfFOYk
>>2
まずダウンロードしてくれ
0004名前は開発中のものです。2010/01/31(日) 20:58:32ID:pjpwyVdW
今からやってみようと思ってたんだ。
とりあえずダウンロードしたぜ、次は?

チュートリアルとかほしい
0005名前は開発中のものです。2010/01/31(日) 21:06:42ID:uYVfFOYk
実は俺自身今四苦八苦してるとこなんだぜ
日本語の資料が少なすぎる
ここをきっかけに日本でも広まるといいなぁと思ってるんだが
0006名前は開発中のものです。2010/01/31(日) 21:08:10ID:uYVfFOYk
>>4
downloadしたファイルの中にSampleFrameworkってのがあるだろ
その中にいろいろあるから試しに読んだり実行したりしてみてくれ
0007名前は開発中のものです。2010/02/01(月) 06:55:45ID:8X+6W91l
よくやく音楽ループ再生できるようになったorz///
0008名前は開発中のものです。2010/02/02(火) 17:51:23ID:+lJWZMUB
アク禁テスト
0009名前は開発中のものです。2010/02/02(火) 17:56:37ID:+lJWZMUB
やっと書けました、ということだけど
うちはSampleFramework使わないでManagedDirectXからの移行で
3DもInputもかなり本格的に仕上がっている
SampleFrameworkだとデバイスの初期化について載ってないので少々抵抗ある
0010名前は開発中のものです。2010/02/02(火) 18:05:14ID:6T1hs+2r
SampleFrameworkはXNA触った人がやるには入りやすい
0011名前は開発中のものです。2010/02/02(火) 18:14:57ID:C8VPblcf
.NETでDirectXをやるならXNA、Managed DirectX、Windows API Code Packと他にも色々ある。
SlimDXは立場的に微妙な気がするけど実際どうなの?
0012名前は開発中のものです。2010/02/02(火) 18:20:31ID:+lJWZMUB
>>11
Windows API Code PackはVistaや7移行でないと使えないからね
XNAは3Dがややこしい、DirectXのMesh.DrawSubsetが使えないのが辛い
その上effectの記述も面倒だし
何だかんだでSlimDXは使い易いよ
オープンソースなのにMDX以上に安定してるし
0013名前は開発中のものです。2010/02/02(火) 19:14:58ID:C8VPblcf
SlimDXを使ったゲームやアプリケーションで有名なものって何があるんでしょうか?
0014名前は開発中のものです。2010/02/03(水) 01:17:47ID:SBy6WAi8
有名なものはぶっちゃけ無いよ。
不安をぬぐいたいならソースでも読んで見れば?
MDXやCode Packを使うよりはマシだと思えるようになるから。
0015名前は開発中のものです。2010/02/03(水) 02:00:18ID:g/HVJ6AF
これからSlimDXで同人ゲー作って有名になりたいとこだ
MDXも長いこと使ってたけど不具合目立つ
もっと簡単にゲーム作りたいならDarkGDK(.NET版)もある、有料だけど
暇あったら手を出そうかなんて思ったり
0016名前は開発中のものです。2010/02/03(水) 06:46:28ID:hKhRhaG2
おとといからslimSDKをいじくり回してたんだけど
俺の作りたいゲームが作れそうなメドがたったから
移行しようと思う これかなり良いよ
0017名前は開発中のものです。2010/02/03(水) 21:24:28ID:y42hZeU6
良いんだけどDirectInputだけが糞なんだよなあ
0018名前は開発中のものです。2010/02/03(水) 23:32:46ID:g/HVJ6AF
>>17
基本的にMDXと同じ機能が使えるけど
JoyStick初期化のとき、ゲームパッド刺さっていないとエラーになったりするのが辛い
後バージョン上がる度にDirectInput部分だけクラス名・メソッド・プロパティ名が変わったりするから
少々困惑させられる、他はほとんど名前固定で変更ないのに
次のバージョンではもう変えないで欲しい
0019名前は開発中のものです。2010/02/07(日) 13:43:07ID:NXDiksat
今月DirectX SDKの最新が出たんで近いうちSlimDXも対応版が出ると思う。
それでどうなってるかだねえ
0020名前は開発中のものです。2010/02/09(火) 18:28:57ID:rOpCrrSS
Direct3Dでは頂点の構造体すら用意されてないくらいなのに
SlimDX.DirectInput.SoccerOffenseControlsとか頭おかしいとしか思えない
どこがslimなのかと
0021名前は開発中のものです。2010/02/13(土) 10:00:53ID:gk9dzd2/
スレ発見&応援で

SlimDX関連 いろいろ
http://code.google.com/hosting/search?q=label%3ASlimDX&projectsearch=Search+projects

視差遮蔽マッピング ( Parallax Occlusion Mapping )
http://jldoty.com/geek/mdx_pom/MDX_POM.html

↑がよくわからん奴は
3Dグラフィックス・マニアックス
18 バンプマッピングの先にあるもの(2)〜視差遮蔽マッピング
http://journal.mycom.co.jp/column/graphics/018/index.html
つうかこのコラム一通りみれ
0022名前は開発中のものです。2010/02/13(土) 10:24:19ID:mqqbM8pa
半透明処理の方法を教えてほしいっす
0023名前は開発中のものです。2010/02/13(土) 11:39:39ID:gk9dzd2/
Samples ソリューションの中の Direct3D9の Water の
WaterEntity.cs の59行目、
device.SetRenderState(RenderState.AlphaBlendEnable, true);
んで、67行目 末尾がfalseになっとるな?
アルファブレンドを有効にして、描画、アルファブレンド無効としてるわけだ
0024名前は開発中のものです。2010/02/16(火) 06:28:27ID:lwpkWEcJ
ほんたまさんのスリムドカンのスレかと思った
0025名前は開発中のものです。2010/02/25(木) 19:31:57ID:F3d7kXlA
PresentParameters.Windowed=falseからPresentParameters.Windowed=trueに切り替えると
ウィンドウが最大化されるのはなんで?
FormのLocationもSizeもWindowStateもFormBorderStyleもウィンドウ時と変わらないのに(なので当然サイズ変えても意味なし)
0026名前は開発中のものです。2010/03/03(水) 19:09:28ID:kC+oOCRK
>>25
MDXの話で申し訳ないが、MDXならば勝手にTopMostとFormBorderStyleとClientSizeは変わってるよ。
多分ネイティブのDirectXがそうなってるんじゃないのか?
0027名前は開発中のものです。2010/03/09(火) 11:14:28ID:/qSOVn5X
Developer SDKだけDLすればDirectXSDKは不要ですか?
参照の追加にSlimDXだけ追加すれば使えそうに書いてあるけど
SDKもバージョンあわせなきゃいけないってのも>>1の日本語解説に書いてある

あとMicrosoft .NET Framework 2.0 SDK以降も必要?
32bitマシンだしD3D9以上のこと使わないなら不要でしょうか?
どちらも500M近くあって気が遠くなる・・・
0028名前は開発中のものです。2010/03/09(火) 21:08:29ID:SHDHNGTO
.NET Framework SDKはVSExpressがあれば不要
DirectX SDKは必須ではないけどいずれサンプルを見るために確実に必要になる
C++のサンプルしかないけど読むくらいはできないときつい
0029名前は開発中のものです。2010/03/14(日) 09:10:06ID:Ob77Xb8B
これ使ったエロゲがでたな
0030名前は開発中のものです。2010/03/18(木) 19:02:29ID:sAIb3WQr
SampleにWPFを使う為のフレームワークあったのね
自分で作ったのより使いやすそうだわ
0031名前は開発中のものです。2010/03/21(日) 20:18:08ID:CzRwkR6A
>>27
SlimDXの再頒布パッケージは完全なDirectX再頒布パッケージを
収録してない嘘パッケージであることに注意。
インスコ直後のXPにこれ入れてもゲームは動かんぞ。

28の言うようにサンプルはC++で書かれているからそれを逐一C#に移植していくことになる。
0032名前は開発中のものです。2010/03/21(日) 20:21:40ID:CzRwkR6A
>>30
Direct3DでレンダリングかけてるというWPFとSlimDXの組み合わせは一番面白そうだよな。
0033名前は開発中のものです。2010/03/21(日) 20:57:09ID:BNf6aD+I
実際には組み合わせられないのが残念
別々に動かしてサーフェス転送してるだけ
コントロールのウィンドウハンドル取れるWinFormsの方がまだ親和性は高い
0034名前は開発中のものです。2010/05/14(金) 15:50:38ID:Agn9QNYG
0035名前は開発中のものです。2010/10/09(土) 21:42:28ID:nr26u1G7
0036名前は開発中のものです。2010/10/23(土) 17:36:44ID:dH4nrlFp
SlimDXでDirectX初めてやってるんだけどいいねコレ。
今はHLSLでシェーダを触り始めた辺り。
しかし、2Dゲーの為に苦労してるなぁ〜…って思うw

GPU! GPU! GPU!
0037名前は開発中のものです。2010/10/23(土) 17:41:32ID:dH4nrlFp
俺が使いたいのはピクセルシェーダなんだよぅ、おぅ
0038名前は開発中のものです。2010/10/23(土) 19:02:57ID:NYvWtI7E
2005は対象外かよー
0039名前は開発中のものです。2010/10/23(土) 21:01:27ID:dH4nrlFp
ソースのコンパイルの話っすか
0040名前は開発中のものです。2010/10/24(日) 14:49:27ID:41k51lwY
頂点変換済みの板ポリをウィンドウのクライアント領域に描画して、
それをHLSLで弄るスケルトンがようやく完成したぜ… in D3D9

今度はピクセルシェーダでテスクチャにモザイクかけてみるよ(よ!)

GPU! GPU! GPU!
0041名前は開発中のものです。2010/10/24(日) 16:07:26ID:0z3YDA8C
そんなもんC++やXNAのサンプルでいくらでもあるじゃん
だいたいそのまま移植すればいいだけ
0042名前は開発中のものです。2010/10/24(日) 16:39:37ID:41k51lwY
>>41
ちょうどXNAのを拾って読んでる所w
理屈で考えたら移植で動く筈なんですよね

勉強がてら中身の理解も進めます
0043名前は開発中のものです。2010/10/24(日) 16:49:12ID:0z3YDA8C
2次元エフェクトならWindows Presentation Foundation Pixel Shader Effects Libraryがお勧め
一通りまとまっててWPF使わなくても参考になる
0044名前は開発中のものです。2010/10/24(日) 17:13:50ID:41k51lwY
>>43 thx!
まさにそれ落として読んでましたw
サンプル動画も見たんですが、どう考えても宝の山ですww

ただHLSLの基本がまだまだなので理解力がヤバイですorz
ティーカップの人の本を買って熟読するしかないですね。

P.S.
SlimDXの2DゲームエンジンってGorgonってのしかなさそうですね。
まぁ、自分用の作るから別にいいんですが、参考にしてみようかと。
SDL.netのスプライト周りが面白かったんで、その変も参考にしたいですね。

つーかGorgonはWin7(x64)だと何故かインストールで弾かれるw
.Net3.5は最初から入ってる筈なのにインストーラーが馬鹿なのかな?
だからあれほどzipでくれと言ってるのに。
0045名前は開発中のものです。2010/11/13(土) 09:04:43ID:snFVsDxl
TextLayoyt:SetDrawingEffect()に渡すIClientDrawingEffectの実装の仕方がさっぱりわからん
C#での実装の仕方を教えてほしい
0046名前は開発中のものです。2010/11/13(土) 12:26:45ID:qup/FXee
DirectWrite使ったことないけど見てみたらComPointerに吹いた
COMのIDWriteTextRendererをC#のCOM相互運用で実装して返せばいいのかな
できなくはないんだろうけど俺には無理というかやりたくない
0047名前は開発中のものです。2010/11/14(日) 13:07:09ID:VAytE0MM
TextLayoutでクラスを実体化させたあとGetDrawingEffect()で取り出せる。(嘘)
0048名前は開発中のものです。2010/12/15(水) 17:22:05ID:W0ff0zj1
visualstudio2010でslimdxsamplesのSimpleModel10をデバッグすると
DXGI_ERROR_UNSUPPORTEDって出て途中で止まるんだけど理由わかりますか?
0049名前は開発中のものです。2010/12/15(水) 17:31:36ID:D5FJhaCt
>>48
ハードウェアがサポートしてないから。

ただ、サポートしてないと言っても色々あって、
プログラムが必要としてない機能をデバイスに要求してて失敗してるだけなら、
それを外すことで他の部分は動かせるようになる。
0050名前は開発中のものです。2010/12/15(水) 21:24:32ID:q2iTm1kx
>>49
やっぱりハードの問題だったか。
ありがとうございます
0051名前は開発中のものです。2010/12/18(土) 01:42:46ID:4XOJBpRQ
SlimDX使ってる人少ないなぁ。
やっぱりC#でDirectX使うのは少数派なんだろうな。
MicrosoftはなぜDirectXサポートを止めたのだろうか。
無理矢理XNAに引きずり込みたかったのだろうけど。
0052名前は開発中のものです。2010/12/18(土) 09:57:31ID:JWorHuxc
DirectX生で使うような人の多くは速度やらGCやらでC#は避けるんだろうなぁ
あとドキュメントもほぼ全てC/C++向けに書かれてるし。
まぁ何だかんだ言ってC#の手軽さとXNAはよくあってると思う。
MSが作ってるだけあってよく作り込まれたフレームワークだし。
0053名前は開発中のものです。2010/12/18(土) 11:43:06ID:NqdLgtTb
悪い意味で他にライバルが居ないんだよな
C++は別格としても、それ以外ではC#のほかに現実的な選択肢が無い
0054名前は開発中のものです。2010/12/18(土) 20:11:14ID:4XOJBpRQ
やっぱりC++が現実的だよね。
DX10以降になればWindows API Code Packが使えるのかな。
0055名前は開発中のものです。2010/12/18(土) 21:50:41ID:K2tyzowz
俺はアプリやゲーム自体はC++で作りたいんだけど
エディタとかは簡単にC#で作りたいんだよね
そこで困るんだよなぁ

DirectXを使用しないC#なんて描画が遅くて話にならないし
使うにしても現状XNAしか選択肢が無いけれどXBOXの仕様にひっぱられて
DirectX9までの中途半端な物しか使えない

やっぱりC#から普通にDirectXを呼び出せるManagedDirectXの存在は
必須だったと思うんだが、なぜ開発をやめてしまったのか・・・

だからSlimDXには超期待している
0056名前は開発中のものです。2010/12/18(土) 21:53:45ID:JWorHuxc
エディタなら配布のこともあまり考えなくて良いからSlimDXは良い選択だと思う
0057名前は開発中のものです。2010/12/18(土) 22:23:40ID:4XOJBpRQ
けどC#+SlimDXだと、DirectX+Net Framework+SlimDXが必要だからね。
SlimDxは添付できるし、DirectXもNet FrameworkもXP以降は最初から入って
いるけど、今の最新にする場合はやっぱりインスコ必要だし。
そこが一番面倒なとこ。
SlimDxはDirectXの薄いラッパーだから、変に集約してなくて使いやすいので
選択肢としてはいいとは思う。
0058名前は開発中のものです。2010/12/18(土) 22:56:19ID:5bWq6Od2
まあD言語とかの選択肢がないではないけどな。

WPFとの組み合わせが確立できるといいんだけどなぁ。
0059名前は開発中のものです。2010/12/18(土) 23:58:01ID:4XOJBpRQ
WPFはゲームには使えないだろ。
ブラウザゲー程度かと。

D言語は昨日サイト見てたけど、言語仕様がガラパゴスな感じ
だったね
0060名前は開発中のものです。2010/12/19(日) 09:49:54ID:+uUW/+wM
D言語って言語仕様だけ見ればかなり良い言語だと思うんだけど。
基本はC系だしガラパゴスな感じってのがよく分からん。
ただ、これでゲーム作るとなるとC#なんて目じゃ無いぐらいドキュメントが少ないっていう。
0061名前は開発中のものです。2010/12/19(日) 14:39:17ID:tZJ4XwZS
Dは互換性のない言語仕様変更をしょっちゅうやってるから実用言語としては話にならない
C#も言語仕様は拡張しまくってるけど、MSだから上位互換は絶対に保たれる
0062名前は開発中のものです。2010/12/19(日) 14:55:42ID:tl1Xfhrg
>>61
D言語ってそんなに互換性のない仕様変更多いのか。
自作ゲームで採用するのを見送ってよかったぜ。

>>60
基本C系だけど、色んな言語のいろいろな機能を取り込んでいるから
機能多すぎと言った方がいいかもしれない。
まあ、基本だけ覚えて後は使わなければいいのだけど、それだとD言語
をわざわざ選択する必要はないし、ある機能を使ってこそ意味があると
思う。
0063名前は開発中のものです。2010/12/19(日) 16:50:41ID:+uUW/+wM
なんかD言語スレ見たくなってしまったなw
0064名前は開発中のものです。2010/12/19(日) 17:15:07ID:tl1Xfhrg
あー、変な話降ってすまない。
元のSlimDXの話をどうぞ。
0065名前は開発中のものです。2010/12/19(日) 19:59:21ID:oIwD3nP1
優越決まっても、別に最初から最後まで
それしか知らないそればかり使えない事は無い
ゲハ板の住人でもあるまいし


C言語わかってもDirectX SDKのDXUT読める奴はそう居ない
シェーダーとか使いこなせるようになるまでは
C#でもDでもいいんじゃないか
0066名前は開発中のものです。2010/12/19(日) 20:34:24ID:+uUW/+wM
むしろシェーダーとか使うようになるまでが言語の差が出てくると思うんだが
3Dの基礎はどの言語でも変わらない訳だし
0067名前は開発中のものです。2010/12/19(日) 21:34:42ID:oIwD3nP1
曖昧な書き方して、意味を取り違えられたかな?

CやC++で初めるのは良いよ
後々PIXを使えないと死ぬので、どのみちCヘッダーぐらい
読め無いと生き残れない
だけど、DXUTをガチで相手したら駄目
Cがこういう糞言語という訳でない
0068名前は開発中のものです。2010/12/19(日) 22:36:29ID:EYwGO04p
DXUTはそれ自体が大規模化しちゃって、
DirectX(3D)の使い方を調べるのはやや不向きになっちゃってるのが残念だよね。
その点はSlimDXのサンプルのほうが簡潔で分かりやすい。

そいや、C#でプリミティブのVertexBuffer用のデータを作成するのって
皆はどうやってる?
やっぱりstructを定義して1個ずつインスタンスを初期化していくんですかね。
この部分、ジェネリックがうまいこと動かずにすごく苦労する。
0069名前は開発中のものです。2010/12/19(日) 22:48:47ID:2VEpyIA3
unsafeでポインタ使いまくり
SlimDXなんか使ってる時点で安全性なんか関係ない
0070名前は開発中のものです。2010/12/20(月) 22:37:09ID:YK+Rc81C
ポインタ使いまくりなら最初からC++でやればいい気がするが?
0071名前は開発中のものです。2010/12/20(月) 23:00:57ID:Ml895Bvs
なんでそういう極論になるかな。
速度的にクリティカルなところとか、どうしても低レベルな処理をしたいところはあるだろ。
そういう箇所って言うのは一般にはほんの一部なんで、
そこのためだけに面倒なC++を使う必要がないのは大きなメリット。
0072名前は開発中のものです。2010/12/21(火) 00:32:03ID:N/+0RCBN
ところで結構作り進めて今更気がついた。
DirectX9でのロスト対策がどうしようもないんだけどどうすればいい?
Device.Resetかけた時点でInvalidCallを吐き出して進まん・・・
0073名前は開発中のものです。2010/12/21(火) 01:17:54ID:FsRX6CKW
>>72
Direct3D9以前のデバイスロスト対策は、それはもう大変なんだよ。
今からやるならおすすめしないね。
仕事上、どうしてもやらないとというなら頑張れ。

>>69-71
ちょっと違うんだな。VertexBufferは速度面に問題があるのではなくて、
ジェネリックが使えない部分で困ってるんだよ。
C++のように何でもかんでもテンプレート化ということはできないから。
0074名前は開発中のものです。2010/12/21(火) 05:58:42ID:UFi6vgUK
わからん。専用のstruct定義して配列流しこむ以外に何かあるの?
もしかしてC++でいうTMPとか駆使してFVFや頂点宣言を自動で解決したいとかいう話?
0075名前は開発中のものです。2010/12/21(火) 08:52:18ID:FsRX6CKW
>>74
MemoryStreamにバイト単位で書き込んでいく方法もある。
どうもこのあたりの部分をジェネリックでうまく一般化出来ないんだよね。
C#相談室あたりで質問したけど無理、という結論になったことが。
0076名前は開発中のものです。2010/12/21(火) 10:07:33ID:IUyb5141
なんだコイツ?
会話する気が無いのか?

VertexBufferの作成やSetFVFが簡単にできる
C++の構文で、C#にはできないのはな〜だ?
ってwなぞなぞかよw

聞きかじった知識があるだけで、何も理解してない
だろコレ
0077名前は開発中のものです。2010/12/21(火) 11:45:06ID:FsRX6CKW
>>76
書かれてるレスをなぞなぞ呼ばわりしてるんだったら、
理解してないのはお前じゃないか。

SlimDXはC#でDirectXを扱えるようになる便利なライブラリだが、
VertexBufferのフォーマットを色々と弄りたい時に
C#の文法上の制限から扱いにくい場合があるという話をしているだけ。
0078名前は開発中のものです。2010/12/21(火) 11:59:41ID:IUyb5141
じゃあ、C++文法上だとどんな書き方ができる?
0079名前は開発中のものです。2010/12/21(火) 13:40:09ID:589aNUur
頂点扱うメソッドやクラスはなんでもかんでも<TVertex>と書きたいということ?
インターフェイス使って
interface IPosition3D { Vector3 Position3D { get; set; } }
interface ITexCoord2D { Vector2 TexCoord2D { get; set; } }
where TVertex : struct, IPosition3D, ITexCoord2D みたいな感じで可能
構造体の場合は実行時に特殊化されるのでインターフェイス経由のメンバアクセスでもボックス化は発生しないけど
プロパティ経由だからインライン展開されたとしてもコピーは消えないのでどうしても遅くなるのは仕方ない
MemoryStreamとか使っていい程度なんだったら別に問題にはならんでしょ
0080名前は開発中のものです。2010/12/21(火) 14:33:36ID:IUyb5141
ガキはほっといて、C#のメタプログラミングで
VertexDeclarationの自動化を解決させちまおうぜ

C++の静的じゃなくて、AttributeとReflectorを使った動的メタプログラミング

定義部
struct HOGEVertex
{
   [VertexElement(type = DeclarationType.D3DDECLTYPE_FLOAT3 ,usage = Decl
arationUsage.D3DDECLUSAGE_POSITION)]
   Vector3 Position;
   [VertexElement(type = DeclarationType.D3DDECLTYPE_FLOAT2 ,usage = Decl
arationUsage.D3DDECLUSAGE_TEXCOORD)]    Vector2 UV;
...

読み込み部
VertexElement[] ReadFVFAttribute<T>() where T : struct
{
var vertexElements = new List<VertexElement>();
foreach(var fi in typeof(T).GetFields())
{
   foreach(var attr in fi.GetType().GetCustomAttributes(false))
   {
       if (attr.GetType() == typeof(VertexElementAttribute) )
           vertexElements.add(new 略);
...
   result = vertexElements.ToArray();
}
0081名前は開発中のものです。2010/12/21(火) 15:10:37ID:FsRX6CKW
>>80
なんじゃこりゃw すごい動的なコードだなぁ。
VertexBuilder的なクラスの階層でジェネリックにすればいいのかなと
思って色々試したんだけど、うまくいかなかったんだよね。
0082名前は開発中のものです。2010/12/21(火) 16:03:41ID:589aNUur
それだったら別にリフレクションなんか使わなくても
VertexElement[]を返すプロパティを宣言したインターフェイスをHOGEVertexに実装させて
whereで要求すればいいだけじゃないの?
0083名前は開発中のものです。2010/12/21(火) 16:08:34ID:IUyb5141
それC++でやってたソースみた事あんのか?
なんだかな

C++もC#も知らない
その自分が未熟なことも知らない
しまいには人を見下すだけで会話もできない
0084名前は開発中のものです。2010/12/21(火) 16:10:35ID:IUyb5141
>>82
うん 俺もこんなの使って無い
0085822010/12/21(火) 16:15:24ID:589aNUur
直接関係ないけどGetCustomAttributesがフィールドの宣言順に返ってくる保証は無いよ。
順番が保証されてるフィールド情報の列挙方法はリフレクションAPIには無いので、
VertexElement属性には明示的にインデックスを付ける必要がある。
どうせリフレクション使うんだったら、staticプロパティとしてVertexElement[]を返すプロパティを定義してしまって
そっちに属性を付けた方がいいかもしれない。
0086名前は開発中のものです。2010/12/21(火) 17:09:39ID:IUyb5141
>>85
>宣言順に返ってくる保証は無いよ
本番では使って無くてよかったw


後の継承設計を考えると、staticなVertexDeclarationを
渡す、IVertexDeclarationProvider{ GetDeclaration(); }じゃないかな。

たぶん、みんなこういうことしてるのではないかなぁ
DrawableObj<T> where T: struct , IVertexDeclarationProvider
{
  Draw() //毎フレーム
  {
    gd.VertexFormat(T.GetDeclaration());
    vb.SetData(T_array);
  }
}
class HogeEffectedObj : DrawableObj<HogeVertexA>
リフレクション使うとしたら、ゲーム開始やLoading中に、
プロジェクト中のstaticな要素をパラメータ付けて初期化するとか(破棄&GCするとか)

ゲームのメインループ外に処理にできないと設計の意味が無い。
0087名前は開発中のものです。2010/12/21(火) 18:38:36ID:Xai41NPW
インターフェイスのstaticメンバはサポートされてないので
staticフィールドを返すインスタンスメンバとして実装してdefault(T).GetDeclaration()かな
0088名前は開発中のものです。2010/12/21(火) 20:51:48ID:N/+0RCBN
>>73
亀レスすまぬ
普通にロスト起こした時にSpriteやらのリセットをしてなかっただけだった。無事に対策できたっぽい
失礼しました
0089名前は開発中のものです。2010/12/21(火) 23:09:44ID:IUyb5141
>>87
ゴメンtypo

× T.GetDeclaration() //コンパイルできません
○ T_array[0].GetDeclaration() //こんなもんかな

それから型パラメータは TVertex とかにしないとスゲー読みづらい
0090名前は開発中のものです。2010/12/21(火) 23:25:18ID:Xai41NPW
いやdefault(T).GetDeclaration()のほうがいい
構造体なのでdefault(T)でインスタンスが作れる
0091名前は開発中のものです。2010/12/21(火) 23:36:17ID:Xai41NPW
それと、リフレクション使うならこういうふうにシングルトンでキャッシュするのがいいよ
class VertexInfo<TVertex> {
 public static readonly VertexInfo<TVertex> Instance = new VertexInfo<TVertex>();
 public VertexElement[] Format { get; set; }
 private VertexInfo() { /*ここでリフレクション使ってFormatを初期化*/ }
}
0092名前は開発中のものです。2011/01/23(日) 21:16:58ID:v5GChX7G
俺MDXから入った身なんだけど、Spriteでの拡大とか回転に悩んでるんだが。
SlimDXでのDirectX9オンリーで作りたいんだけど、MDXで作ってた時みたいにSprite.Draw2DでやろうとしてもDX10/11にしか無いんだよね。

要するにSlimDXでSpriteの拡大とか回転ってどうやんの?
本家DirectXの知識は殆ど無い。
0093名前は開発中のものです。2011/01/23(日) 21:28:14ID:IvAtt79g
Transformに変換行列入れる
ネイティブのD3DXのラッパーっていうのはなんか気持ち悪いからSpriteは自作してるなあ
0094名前は開発中のものです。2011/01/23(日) 22:19:47ID:v5GChX7G
>>93
いまいちキチンと分かって無いんだけど、Matrix.Transformation2Dってものがあったんで試してみた。
が、表示されん。きちんと描画してるはずなのに何故だ・・・
0095名前は開発中のものです。2011/01/24(月) 00:11:56ID:ZV2/0eH0
>>94
SlimDXのサンプルは単純でよく出来てるから、
それを真似するところから始めるといいよ。
0096名前は開発中のものです。2011/01/24(月) 17:28:23ID:SbpYcvOy
サンプルを見てみたが、SpriteとTexture使った拡大とか無かったわ・・・
うーむ、俺の考え違いだったのかも知れない。やはり一から勉強しなおす必要がありそうだ。
0097名前は開発中のものです。2011/01/24(月) 17:33:40ID:ZV2/0eH0
>>96
俺の場合、2Dの板ポリをGPU描画することが大半なので専用の計算をしている。
座標系が2D系と同じにすることを意図して、
Z軸のマイナス側からカメラを向ける。
そして板ポリの座標系がそれに合うようにワールド座標を設定しておく方式。
0098名前は開発中のものです。2011/01/24(月) 17:45:20ID:SbpYcvOy
>>97
なるほど、ちょっとじっくり勉強しつつ試してみます。ありです。

ただMDX見たいなDraw2Dのように簡単に拡大とか出来たりする奴はSlimDXのDX9には無いってことでいいのかな。
ずっとMDXに頼ってきて最近SlimDXに移ってきたから・・・ 無知ですみません
0099名前は開発中のものです。2011/01/24(月) 18:02:45ID:ZV2/0eH0
>>98
それならなおさらD3DXSpriteを使えばいいじゃん。
0100名前は開発中のものです。2011/01/26(水) 21:53:12ID:q2pNSJtE
度々すまない。
俺が思ってる簡単に拡大とかって言うのは、
Sprite.Draw(位置,Rectangle,サイズ,ロケーション)
見たいなもので、それが無いのかなと甘い考えをしてた。
D3DXSpriteと言われても良く分からなかった。
もうこれで分からなかったら迷惑になりそうなので引きます・・・
0101名前は開発中のものです。2011/01/26(水) 22:59:48ID:Dys02ewd
>>100
D3DXFontには変換座標かけつつ描画するモードがあるから、
たぶんSpriteにもあるはずなんだけど。
ただし、D3DXFontの場合は描画が遅くなったのであしからず。
(なぜかというと、変換かけない場合はVertexエンジンを使用せずに描画するから)
■ このスレッドは過去ログ倉庫に格納されています