1read 100read
2013年17ゲ製作技術188: SlimDXについて語ろうぜ (188)
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▼
CEDECどうだった? (515)
俺がこっそりとゲームを作るスレ 第2期 (960)
モナドセプト (275)
もうマンネリなシナリオは充分だ (378)
ネットでの人材募集ノウハウ・募集文評価スレ (115)
RADEON8500購入 → (゚д゚)ウマー (148)
SlimDXについて語ろうぜ
1 :2010/01/31 〜 最終レス :2013/08/07 公式 http://slimdx.org/ 日本語の解説 http://mainori-se.sakura.ne.jp/slimdxwiki/ SlimDX は、.NET Framework に対応した言語(C#、VB.NET など)を使って DirectX アプリケーションを開発することができるオープンソースのライブラリ(DLL)です。
2 : で、どうすんの。
3 : >>2 まずダウンロードしてくれ
4 : 今からやってみようと思ってたんだ。 とりあえずダウンロードしたぜ、次は? チュートリアルとかほしい
5 : 実は俺自身今四苦八苦してるとこなんだぜ 日本語の資料が少なすぎる ここをきっかけに日本でも広まるといいなぁと思ってるんだが
6 : >>4 downloadしたファイルの中にSampleFrameworkってのがあるだろ その中にいろいろあるから試しに読んだり実行したりしてみてくれ
7 : よくやく音楽ループ再生できるようになったorz///
8 : アク禁テスト
9 : やっと書けました、ということだけど うちはSampleFramework使わないでManagedDirectXからの移行で 3DもInputもかなり本格的に仕上がっている SampleFrameworkだとデバイスの初期化について載ってないので少々抵抗ある
10 : SampleFrameworkはXNA触った人がやるには入りやすい
11 : .NETでDirectXをやるならXNA、Managed DirectX、Windows API Code Packと他にも色々ある。 SlimDXは立場的に微妙な気がするけど実際どうなの?
12 : >>11 Windows API Code PackはVistaや7移行でないと使えないからね XNAは3Dがややこしい、DirectXのMesh.DrawSubsetが使えないのが辛い その上effectの記述も面倒だし 何だかんだでSlimDXは使い易いよ オープンソースなのにMDX以上に安定してるし
13 : SlimDXを使ったゲームやアプリケーションで有名なものって何があるんでしょうか?
14 : 有名なものはぶっちゃけ無いよ。 不安をぬぐいたいならソースでも読んで見れば? MDXやCode Packを使うよりはマシだと思えるようになるから。
15 : これからSlimDXで同人ゲー作って有名になりたいとこだ MDXも長いこと使ってたけど不具合目立つ もっと簡単にゲーム作りたいならDarkGDK(.NET版)もある、有料だけど 暇あったら手を出そうかなんて思ったり
16 : おとといからslimSDKをいじくり回してたんだけど 俺の作りたいゲームが作れそうなメドがたったから 移行しようと思う これかなり良いよ
17 : 良いんだけどDirectInputだけが糞なんだよなあ
18 : >>17 基本的にMDXと同じ機能が使えるけど JoyStick初期化のとき、ゲームパッド刺さっていないとエラーになったりするのが辛い 後バージョン上がる度にDirectInput部分だけクラス名・メソッド・プロパティ名が変わったりするから 少々困惑させられる、他はほとんど名前固定で変更ないのに 次のバージョンではもう変えないで欲しい
19 : 今月DirectX SDKの最新が出たんで近いうちSlimDXも対応版が出ると思う。 それでどうなってるかだねえ
20 : Direct3Dでは頂点の構造体すら用意されてないくらいなのに SlimDX.DirectInput.SoccerOffenseControlsとか頭おかしいとしか思えない どこがslimなのかと
21 : スレ発見&応援で 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 つうかこのコラム一通りみれ
22 : 半透明処理の方法を教えてほしいっす
23 : Samples ソリューションの中の Direct3D9の Water の WaterEntity.cs の59行目、 device.SetRenderState(RenderState.AlphaBlendEnable, true); んで、67行目 末尾がfalseになっとるな? アルファブレンドを有効にして、描画、アルファブレンド無効としてるわけだ
24 : ほんたまさんのスリムドカンのスレかと思った
25 : PresentParameters.Windowed=falseからPresentParameters.Windowed=trueに切り替えると ウィンドウが最大化されるのはなんで? FormのLocationもSizeもWindowStateもFormBorderStyleもウィンドウ時と変わらないのに(なので当然サイズ変えても意味なし)
26 : >>25 MDXの話で申し訳ないが、MDXならば勝手にTopMostとFormBorderStyleとClientSizeは変わってるよ。 多分ネイティブのDirectXがそうなってるんじゃないのか?
27 : Developer SDKだけDLすればDirectXSDKは不要ですか? 参照の追加にSlimDXだけ追加すれば使えそうに書いてあるけど SDKもバージョンあわせなきゃいけないってのも>>1 の日本語解説に書いてある あとMicrosoft .NET Framework 2.0 SDK以降も必要? 32bitマシンだしD3D9以上のこと使わないなら不要でしょうか? どちらも500M近くあって気が遠くなる・・・
28 : .NET Framework SDKはVSExpressがあれば不要 DirectX SDKは必須ではないけどいずれサンプルを見るために確実に必要になる C++のサンプルしかないけど読むくらいはできないときつい
29 : これ使ったエロゲがでたな
30 : SampleにWPFを使う為のフレームワークあったのね 自分で作ったのより使いやすそうだわ
31 : >>27 SlimDXの再頒布パッケージは完全なDirectX再頒布パッケージを 収録してない嘘パッケージであることに注意。 インスコ直後のXPにこれ入れてもゲームは動かんぞ。 28の言うようにサンプルはC++で書かれているからそれを逐一C#に移植していくことになる。
32 : >>30 Direct3DでレンダリングかけてるというWPFとSlimDXの組み合わせは一番面白そうだよな。
33 : 実際には組み合わせられないのが残念 別々に動かしてサーフェス転送してるだけ コントロールのウィンドウハンドル取れるWinFormsの方がまだ親和性は高い
34 :
35 :
36 : SlimDXでDirectX初めてやってるんだけどいいねコレ。 今はHLSLでシェーダを触り始めた辺り。 しかし、2Dゲーの為に苦労してるなぁ〜…って思うw GPU! GPU! GPU!
37 : 俺が使いたいのはピクセルシェーダなんだよぅ、おぅ
38 : 2005は対象外かよー
39 : ソースのコンパイルの話っすか
40 : 頂点変換済みの板ポリをウィンドウのクライアント領域に描画して、 それをHLSLで弄るスケルトンがようやく完成したぜ… in D3D9 今度はピクセルシェーダでテスクチャにモザイクかけてみるよ(よ!) GPU! GPU! GPU!
41 : そんなもんC++やXNAのサンプルでいくらでもあるじゃん だいたいそのまま移植すればいいだけ
42 : >>41 ちょうどXNAのを拾って読んでる所w 理屈で考えたら移植で動く筈なんですよね 勉強がてら中身の理解も進めます
43 : 2次元エフェクトならWindows Presentation Foundation Pixel Shader Effects Libraryがお勧め 一通りまとまっててWPF使わなくても参考になる
44 : >>43 thx! まさにそれ落として読んでましたw サンプル動画も見たんですが、どう考えても宝の山ですww ただHLSLの基本がまだまだなので理解力がヤバイですorz ティーカップの人の本を買って熟読するしかないですね。 P.S. SlimDXの2DゲームエンジンってGorgonってのしかなさそうですね。 まぁ、自分用の作るから別にいいんですが、参考にしてみようかと。 SDL.netのスプライト周りが面白かったんで、その変も参考にしたいですね。 つーかGorgonはWin7(x64)だと何故かインストールで弾かれるw .Net3.5は最初から入ってる筈なのにインストーラーが馬鹿なのかな? だからあれほどzipでくれと言ってるのに。
45 : TextLayoyt:SetDrawingEffect()に渡すIClientDrawingEffectの実装の仕方がさっぱりわからん C#での実装の仕方を教えてほしい
46 : DirectWrite使ったことないけど見てみたらComPointerに吹いた COMのIDWriteTextRendererをC#のCOM相互運用で実装して返せばいいのかな できなくはないんだろうけど俺には無理というかやりたくない
47 : TextLayoutでクラスを実体化させたあとGetDrawingEffect()で取り出せる。(嘘)
48 : visualstudio2010でslimdxsamplesのSimpleModel10をデバッグすると DXGI_ERROR_UNSUPPORTEDって出て途中で止まるんだけど理由わかりますか?
49 : >>48 ハードウェアがサポートしてないから。 ただ、サポートしてないと言っても色々あって、 プログラムが必要としてない機能をデバイスに要求してて失敗してるだけなら、 それを外すことで他の部分は動かせるようになる。
50 : >>49 やっぱりハードの問題だったか。 ありがとうございます
51 : SlimDX使ってる人少ないなぁ。 やっぱりC#でDirectX使うのは少数派なんだろうな。 MicrosoftはなぜDirectXサポートを止めたのだろうか。 無理矢理XNAに引きずり込みたかったのだろうけど。
52 : DirectX生で使うような人の多くは速度やらGCやらでC#は避けるんだろうなぁ あとドキュメントもほぼ全てC/C++向けに書かれてるし。 まぁ何だかんだ言ってC#の手軽さとXNAはよくあってると思う。 MSが作ってるだけあってよく作り込まれたフレームワークだし。
53 : 悪い意味で他にライバルが居ないんだよな C++は別格としても、それ以外ではC#のほかに現実的な選択肢が無い
54 : やっぱりC++が現実的だよね。 DX10以降になればWindows API Code Packが使えるのかな。
55 : 俺はアプリやゲーム自体はC++で作りたいんだけど エディタとかは簡単にC#で作りたいんだよね そこで困るんだよなぁ DirectXを使用しないC#なんて描画が遅くて話にならないし 使うにしても現状XNAしか選択肢が無いけれどXBOXの仕様にひっぱられて DirectX9までの中途半端な物しか使えない やっぱりC#から普通にDirectXを呼び出せるManagedDirectXの存在は 必須だったと思うんだが、なぜ開発をやめてしまったのか・・・ だからSlimDXには超期待している
56 : エディタなら配布のこともあまり考えなくて良いからSlimDXは良い選択だと思う
57 : けどC#+SlimDXだと、DirectX+Net Framework+SlimDXが必要だからね。 SlimDxは添付できるし、DirectXもNet FrameworkもXP以降は最初から入って いるけど、今の最新にする場合はやっぱりインスコ必要だし。 そこが一番面倒なとこ。 SlimDxはDirectXの薄いラッパーだから、変に集約してなくて使いやすいので 選択肢としてはいいとは思う。
58 : まあD言語とかの選択肢がないではないけどな。 WPFとの組み合わせが確立できるといいんだけどなぁ。
59 : WPFはゲームには使えないだろ。 ブラウザゲー程度かと。 D言語は昨日サイト見てたけど、言語仕様がガラパゴスな感じ だったね
60 : D言語って言語仕様だけ見ればかなり良い言語だと思うんだけど。 基本はC系だしガラパゴスな感じってのがよく分からん。 ただ、これでゲーム作るとなるとC#なんて目じゃ無いぐらいドキュメントが少ないっていう。
61 : Dは互換性のない言語仕様変更をしょっちゅうやってるから実用言語としては話にならない C#も言語仕様は拡張しまくってるけど、MSだから上位互換は絶対に保たれる
62 : >>61 D言語ってそんなに互換性のない仕様変更多いのか。 自作ゲームで採用するのを見送ってよかったぜ。 >>60 基本C系だけど、色んな言語のいろいろな機能を取り込んでいるから 機能多すぎと言った方がいいかもしれない。 まあ、基本だけ覚えて後は使わなければいいのだけど、それだとD言語 をわざわざ選択する必要はないし、ある機能を使ってこそ意味があると 思う。
63 : なんかD言語スレ見たくなってしまったなw
64 : あー、変な話降ってすまない。 元のSlimDXの話をどうぞ。
65 : 優越決まっても、別に最初から最後まで それしか知らないそればかり使えない事は無い ゲハ板の住人でもあるまいし C言語わかってもDirectX SDKのDXUT読める奴はそう居ない シェーダーとか使いこなせるようになるまでは C#でもDでもいいんじゃないか
66 : むしろシェーダーとか使うようになるまでが言語の差が出てくると思うんだが 3Dの基礎はどの言語でも変わらない訳だし
67 : 曖昧な書き方して、意味を取り違えられたかな? CやC++で初めるのは良いよ 後々PIXを使えないと死ぬので、どのみちCヘッダーぐらい 読め無いと生き残れない だけど、DXUTをガチで相手したら駄目 Cがこういう糞言語という訳でない
68 : DXUTはそれ自体が大規模化しちゃって、 DirectX(3D)の使い方を調べるのはやや不向きになっちゃってるのが残念だよね。 その点はSlimDXのサンプルのほうが簡潔で分かりやすい。 そいや、C#でプリミティブのVertexBuffer用のデータを作成するのって 皆はどうやってる? やっぱりstructを定義して1個ずつインスタンスを初期化していくんですかね。 この部分、ジェネリックがうまいこと動かずにすごく苦労する。
69 : unsafeでポインタ使いまくり SlimDXなんか使ってる時点で安全性なんか関係ない
70 : ポインタ使いまくりなら最初からC++でやればいい気がするが?
71 : なんでそういう極論になるかな。 速度的にクリティカルなところとか、どうしても低レベルな処理をしたいところはあるだろ。 そういう箇所って言うのは一般にはほんの一部なんで、 そこのためだけに面倒なC++を使う必要がないのは大きなメリット。
72 : ところで結構作り進めて今更気がついた。 DirectX9でのロスト対策がどうしようもないんだけどどうすればいい? Device.Resetかけた時点でInvalidCallを吐き出して進まん・・・
73 : >>72 Direct3D9以前のデバイスロスト対策は、それはもう大変なんだよ。 今からやるならおすすめしないね。 仕事上、どうしてもやらないとというなら頑張れ。 >>69-71 ちょっと違うんだな。VertexBufferは速度面に問題があるのではなくて、 ジェネリックが使えない部分で困ってるんだよ。 C++のように何でもかんでもテンプレート化ということはできないから。
74 : わからん。専用のstruct定義して配列流しこむ以外に何かあるの? もしかしてC++でいうTMPとか駆使してFVFや頂点宣言を自動で解決したいとかいう話?
75 : >>74 MemoryStreamにバイト単位で書き込んでいく方法もある。 どうもこのあたりの部分をジェネリックでうまく一般化出来ないんだよね。 C#相談室あたりで質問したけど無理、という結論になったことが。
76 : なんだコイツ? 会話する気が無いのか? VertexBufferの作成やSetFVFが簡単にできる C++の構文で、C#にはできないのはな〜だ? ってwなぞなぞかよw 聞きかじった知識があるだけで、何も理解してない だろコレ
77 : >>76 書かれてるレスをなぞなぞ呼ばわりしてるんだったら、 理解してないのはお前じゃないか。 SlimDXはC#でDirectXを扱えるようになる便利なライブラリだが、 VertexBufferのフォーマットを色々と弄りたい時に C#の文法上の制限から扱いにくい場合があるという話をしているだけ。
78 : じゃあ、C++文法上だとどんな書き方ができる?
79 : 頂点扱うメソッドやクラスはなんでもかんでも<TVertex>と書きたいということ? インターフェイス使って interface IPosition3D { Vector3 Position3D { get; set; } } interface ITexCoord2D { Vector2 TexCoord2D { get; set; } } where TVertex : struct, IPosition3D, ITexCoord2D みたいな感じで可能 構造体の場合は実行時に特殊化されるのでインターフェイス経由のメンバアクセスでもボックス化は発生しないけど プロパティ経由だからインライン展開されたとしてもコピーは消えないのでどうしても遅くなるのは仕方ない MemoryStreamとか使っていい程度なんだったら別に問題にはならんでしょ
80 : ガキはほっといて、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(); }
81 : >>80 なんじゃこりゃw すごい動的なコードだなぁ。 VertexBuilder的なクラスの階層でジェネリックにすればいいのかなと 思って色々試したんだけど、うまくいかなかったんだよね。
82 : それだったら別にリフレクションなんか使わなくても VertexElement[]を返すプロパティを宣言したインターフェイスをHOGEVertexに実装させて whereで要求すればいいだけじゃないの?
83 : それC++でやってたソースみた事あんのか? なんだかな C++もC#も知らない その自分が未熟なことも知らない しまいには人を見下すだけで会話もできない
84 : >>82 うん 俺もこんなの使って無い
85 : 直接関係ないけどGetCustomAttributesがフィールドの宣言順に返ってくる保証は無いよ。 順番が保証されてるフィールド情報の列挙方法はリフレクションAPIには無いので、 VertexElement属性には明示的にインデックスを付ける必要がある。 どうせリフレクション使うんだったら、staticプロパティとしてVertexElement[]を返すプロパティを定義してしまって そっちに属性を付けた方がいいかもしれない。
86 : >>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するとか) 。 ゲームのメインループ外に処理にできないと設計の意味が無い。
87 : インターフェイスのstaticメンバはサポートされてないので staticフィールドを返すインスタンスメンバとして実装してdefault(T).GetDeclaration()かな
88 : >>73 亀レスすまぬ 普通にロスト起こした時にSpriteやらのリセットをしてなかっただけだった。無事に対策できたっぽい 失礼しました
89 : >>87 ゴメンtypo × T.GetDeclaration() //コンパイルできません ○ T_array[0].GetDeclaration() //こんなもんかな それから型パラメータは TVertex とかにしないとスゲー読みづらい
90 : いやdefault(T).GetDeclaration()のほうがいい 構造体なのでdefault(T)でインスタンスが作れる
91 : それと、リフレクション使うならこういうふうにシングルトンでキャッシュするのがいいよ class VertexInfo<TVertex> { public static readonly VertexInfo<TVertex> Instance = new VertexInfo<TVertex>(); public VertexElement[] Format { get; set; } private VertexInfo() { /*ここでリフレクション使ってFormatを初期化*/ } }
92 : 俺MDXから入った身なんだけど、Spriteでの拡大とか回転に悩んでるんだが。 SlimDXでのDirectX9オンリーで作りたいんだけど、MDXで作ってた時みたいにSprite.Draw2DでやろうとしてもDX10/11にしか無いんだよね。 要するにSlimDXでSpriteの拡大とか回転ってどうやんの? 本家DirectXの知識は殆ど無い。
93 : Transformに変換行列入れる ネイティブのD3DXのラッパーっていうのはなんか気持ち悪いからSpriteは自作してるなあ
94 : >>93 いまいちキチンと分かって無いんだけど、Matrix.Transformation2Dってものがあったんで試してみた。 が、表示されん。きちんと描画してるはずなのに何故だ・・・
95 : >>94 SlimDXのサンプルは単純でよく出来てるから、 それを真似するところから始めるといいよ。
96 : サンプルを見てみたが、SpriteとTexture使った拡大とか無かったわ・・・ うーむ、俺の考え違いだったのかも知れない。やはり一から勉強しなおす必要がありそうだ。
97 : >>96 俺の場合、2Dの板ポリをGPU描画することが大半なので専用の計算をしている。 座標系が2D系と同じにすることを意図して、 Z軸のマイナス側からカメラを向ける。 そして板ポリの座標系がそれに合うようにワールド座標を設定しておく方式。
98 : >>97 なるほど、ちょっとじっくり勉強しつつ試してみます。ありです。 ただMDX見たいなDraw2Dのように簡単に拡大とか出来たりする奴はSlimDXのDX9には無いってことでいいのかな。 ずっとMDXに頼ってきて最近SlimDXに移ってきたから・・・ 無知ですみません
99 : >>98 それならなおさらD3DXSpriteを使えばいいじゃん。
100read 1read
1read 100read TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▲
そろそろ本格的にMMORPGつくってみようぜ! (332)
****創価ゲームを作ろうよ***** (155)
戦車に乗って好き勝手するRPGを作る (125)
ゆめにっきっぽいゲームを作るスレ 12部屋目 (583)
STG作りたいんだがなんかいい案ない? (184)
【初心者】スレを立てる前にココで質問を【Part25】 (706)
--log9.info------------------
【煙草】ハードボイルド総合【値上げ】 (851)
■伊坂幸太郎■part25 (949)
平成仮面ライダーをミステリ的に読む解くスレ11 (114)
□■奥田英朗■□part4 (837)
スティーヴン・ハンターPartV (450)
途中で挫折した本 3冊目 (435)
かっこいい探偵の登場の仕方 (372)
タイトルが秀逸な小説 (360)
【本格の】鮎川哲也 Nホテル六〇六号室【鬼】 (442)
倉知淳 part4 (463)
つまらなかったミステリー小説 一冊目 (305)
完全犯罪を考える。inミス板 vol.22 (109)
【13階段】高野和明 part2【ジェノサイド】 (575)
皆川 博子 3 【drei】 (574)
【ルパン】怪盗・怪人スレ【二十面相】 (125)
恩田陸part13 (862)
--log55.com------------------
【U18アジア選手権大会から】甲子園へ行こうPart140【第91回センバツ大会へ】
18人のサムライ☆第12回 BFA U18アジア選手権☆7
大阪の高校野球162
18人のサムライ☆第12回 BFA U18アジア選手権☆ vs 香港戦8
18人のサムライ☆第12回 BFA U18アジア選手権☆ vs スリランカ、韓国戦9
犯珍犬ルト雑魚ハメが負けて日本料理が美味い! 2018-2
日本は野球は強いのに、サッカーは弱いのはなぜ?3
日本の才能は野球に集結しているという現実