公式
http://slimdx.org/
日本語の解説
http://mainori-se.sakura.ne.jp/slimdxwiki/
SlimDX は、.NET Framework に対応した言語(C#、VB.NET など)を使って
DirectX アプリケーションを開発することができるオープンソースのライブラリ(DLL)です。
SlimDXについて語ろうぜ
■ このスレッドは過去ログ倉庫に格納されています
2010/01/31(日) 10:41:21ID:uYVfFOYk
2010/12/19(日) 16:50:41ID:+uUW/+wM
なんかD言語スレ見たくなってしまったなw
2010/12/19(日) 17:15:07ID:tl1Xfhrg
あー、変な話降ってすまない。
元のSlimDXの話をどうぞ。
元のSlimDXの話をどうぞ。
2010/12/19(日) 19:59:21ID:oIwD3nP1
優越決まっても、別に最初から最後まで
それしか知らないそればかり使えない事は無い
ゲハ板の住人でもあるまいし
C言語わかってもDirectX SDKのDXUT読める奴はそう居ない
シェーダーとか使いこなせるようになるまでは
C#でもDでもいいんじゃないか
それしか知らないそればかり使えない事は無い
ゲハ板の住人でもあるまいし
C言語わかってもDirectX SDKのDXUT読める奴はそう居ない
シェーダーとか使いこなせるようになるまでは
C#でもDでもいいんじゃないか
2010/12/19(日) 20:34:24ID:+uUW/+wM
むしろシェーダーとか使うようになるまでが言語の差が出てくると思うんだが
3Dの基礎はどの言語でも変わらない訳だし
3Dの基礎はどの言語でも変わらない訳だし
2010/12/19(日) 21:34:42ID:oIwD3nP1
曖昧な書き方して、意味を取り違えられたかな?
CやC++で初めるのは良いよ
後々PIXを使えないと死ぬので、どのみちCヘッダーぐらい
読め無いと生き残れない
だけど、DXUTをガチで相手したら駄目
Cがこういう糞言語という訳でない
CやC++で初めるのは良いよ
後々PIXを使えないと死ぬので、どのみちCヘッダーぐらい
読め無いと生き残れない
だけど、DXUTをガチで相手したら駄目
Cがこういう糞言語という訳でない
2010/12/19(日) 22:36:29ID:EYwGO04p
DXUTはそれ自体が大規模化しちゃって、
DirectX(3D)の使い方を調べるのはやや不向きになっちゃってるのが残念だよね。
その点はSlimDXのサンプルのほうが簡潔で分かりやすい。
そいや、C#でプリミティブのVertexBuffer用のデータを作成するのって
皆はどうやってる?
やっぱりstructを定義して1個ずつインスタンスを初期化していくんですかね。
この部分、ジェネリックがうまいこと動かずにすごく苦労する。
DirectX(3D)の使い方を調べるのはやや不向きになっちゃってるのが残念だよね。
その点はSlimDXのサンプルのほうが簡潔で分かりやすい。
そいや、C#でプリミティブのVertexBuffer用のデータを作成するのって
皆はどうやってる?
やっぱりstructを定義して1個ずつインスタンスを初期化していくんですかね。
この部分、ジェネリックがうまいこと動かずにすごく苦労する。
2010/12/19(日) 22:48:47ID:2VEpyIA3
unsafeでポインタ使いまくり
SlimDXなんか使ってる時点で安全性なんか関係ない
SlimDXなんか使ってる時点で安全性なんか関係ない
2010/12/20(月) 22:37:09ID:YK+Rc81C
ポインタ使いまくりなら最初からC++でやればいい気がするが?
2010/12/20(月) 23:00:57ID:Ml895Bvs
なんでそういう極論になるかな。
速度的にクリティカルなところとか、どうしても低レベルな処理をしたいところはあるだろ。
そういう箇所って言うのは一般にはほんの一部なんで、
そこのためだけに面倒なC++を使う必要がないのは大きなメリット。
速度的にクリティカルなところとか、どうしても低レベルな処理をしたいところはあるだろ。
そういう箇所って言うのは一般にはほんの一部なんで、
そこのためだけに面倒なC++を使う必要がないのは大きなメリット。
2010/12/21(火) 00:32:03ID:N/+0RCBN
ところで結構作り進めて今更気がついた。
DirectX9でのロスト対策がどうしようもないんだけどどうすればいい?
Device.Resetかけた時点でInvalidCallを吐き出して進まん・・・
DirectX9でのロスト対策がどうしようもないんだけどどうすればいい?
Device.Resetかけた時点でInvalidCallを吐き出して進まん・・・
2010/12/21(火) 01:17:54ID:FsRX6CKW
2010/12/21(火) 05:58:42ID:UFi6vgUK
わからん。専用のstruct定義して配列流しこむ以外に何かあるの?
もしかしてC++でいうTMPとか駆使してFVFや頂点宣言を自動で解決したいとかいう話?
もしかしてC++でいうTMPとか駆使してFVFや頂点宣言を自動で解決したいとかいう話?
2010/12/21(火) 08:52:18ID:FsRX6CKW
>>74
MemoryStreamにバイト単位で書き込んでいく方法もある。
どうもこのあたりの部分をジェネリックでうまく一般化出来ないんだよね。
C#相談室あたりで質問したけど無理、という結論になったことが。
MemoryStreamにバイト単位で書き込んでいく方法もある。
どうもこのあたりの部分をジェネリックでうまく一般化出来ないんだよね。
C#相談室あたりで質問したけど無理、という結論になったことが。
76名前は開発中のものです。
2010/12/21(火) 10:07:33ID:IUyb5141 なんだコイツ?
会話する気が無いのか?
VertexBufferの作成やSetFVFが簡単にできる
C++の構文で、C#にはできないのはな〜だ?
ってwなぞなぞかよw
聞きかじった知識があるだけで、何も理解してない
だろコレ
会話する気が無いのか?
VertexBufferの作成やSetFVFが簡単にできる
C++の構文で、C#にはできないのはな〜だ?
ってwなぞなぞかよw
聞きかじった知識があるだけで、何も理解してない
だろコレ
2010/12/21(火) 11:45:06ID:FsRX6CKW
>>76
書かれてるレスをなぞなぞ呼ばわりしてるんだったら、
理解してないのはお前じゃないか。
SlimDXはC#でDirectXを扱えるようになる便利なライブラリだが、
VertexBufferのフォーマットを色々と弄りたい時に
C#の文法上の制限から扱いにくい場合があるという話をしているだけ。
書かれてるレスをなぞなぞ呼ばわりしてるんだったら、
理解してないのはお前じゃないか。
SlimDXはC#でDirectXを扱えるようになる便利なライブラリだが、
VertexBufferのフォーマットを色々と弄りたい時に
C#の文法上の制限から扱いにくい場合があるという話をしているだけ。
2010/12/21(火) 11:59:41ID:IUyb5141
じゃあ、C++文法上だとどんな書き方ができる?
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とか使っていい程度なんだったら別に問題にはならんでしょ
インターフェイス使って
interface IPosition3D { Vector3 Position3D { get; set; } }
interface ITexCoord2D { Vector2 TexCoord2D { get; set; } }
where TVertex : struct, IPosition3D, ITexCoord2D みたいな感じで可能
構造体の場合は実行時に特殊化されるのでインターフェイス経由のメンバアクセスでもボックス化は発生しないけど
プロパティ経由だからインライン展開されたとしてもコピーは消えないのでどうしても遅くなるのは仕方ない
MemoryStreamとか使っていい程度なんだったら別に問題にはならんでしょ
80名前は開発中のものです。
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();
}
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();
}
2010/12/21(火) 15:10:37ID:FsRX6CKW
2010/12/21(火) 16:03:41ID:589aNUur
それだったら別にリフレクションなんか使わなくても
VertexElement[]を返すプロパティを宣言したインターフェイスをHOGEVertexに実装させて
whereで要求すればいいだけじゃないの?
VertexElement[]を返すプロパティを宣言したインターフェイスをHOGEVertexに実装させて
whereで要求すればいいだけじゃないの?
2010/12/21(火) 16:08:34ID:IUyb5141
それC++でやってたソースみた事あんのか?
なんだかな
C++もC#も知らない
その自分が未熟なことも知らない
しまいには人を見下すだけで会話もできない
なんだかな
C++もC#も知らない
その自分が未熟なことも知らない
しまいには人を見下すだけで会話もできない
2010/12/21(火) 16:10:35ID:IUyb5141
>>82
うん 俺もこんなの使って無い
うん 俺もこんなの使って無い
8582
2010/12/21(火) 16:15:24ID:589aNUur 直接関係ないけどGetCustomAttributesがフィールドの宣言順に返ってくる保証は無いよ。
順番が保証されてるフィールド情報の列挙方法はリフレクションAPIには無いので、
VertexElement属性には明示的にインデックスを付ける必要がある。
どうせリフレクション使うんだったら、staticプロパティとしてVertexElement[]を返すプロパティを定義してしまって
そっちに属性を付けた方がいいかもしれない。
順番が保証されてるフィールド情報の列挙方法はリフレクションAPIには無いので、
VertexElement属性には明示的にインデックスを付ける必要がある。
どうせリフレクション使うんだったら、staticプロパティとしてVertexElement[]を返すプロパティを定義してしまって
そっちに属性を付けた方がいいかもしれない。
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するとか)
。
ゲームのメインループ外に処理にできないと設計の意味が無い。
>宣言順に返ってくる保証は無いよ
本番では使って無くてよかった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するとか)
。
ゲームのメインループ外に処理にできないと設計の意味が無い。
2010/12/21(火) 18:38:36ID:Xai41NPW
インターフェイスのstaticメンバはサポートされてないので
staticフィールドを返すインスタンスメンバとして実装してdefault(T).GetDeclaration()かな
staticフィールドを返すインスタンスメンバとして実装してdefault(T).GetDeclaration()かな
2010/12/21(火) 20:51:48ID:N/+0RCBN
2010/12/21(火) 23:09:44ID:IUyb5141
>>87
ゴメンtypo
× T.GetDeclaration() //コンパイルできません
○ T_array[0].GetDeclaration() //こんなもんかな
それから型パラメータは TVertex とかにしないとスゲー読みづらい
ゴメンtypo
× T.GetDeclaration() //コンパイルできません
○ T_array[0].GetDeclaration() //こんなもんかな
それから型パラメータは TVertex とかにしないとスゲー読みづらい
2010/12/21(火) 23:25:18ID:Xai41NPW
いやdefault(T).GetDeclaration()のほうがいい
構造体なのでdefault(T)でインスタンスが作れる
構造体なのでdefault(T)でインスタンスが作れる
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を初期化*/ }
}
class VertexInfo<TVertex> {
public static readonly VertexInfo<TVertex> Instance = new VertexInfo<TVertex>();
public VertexElement[] Format { get; set; }
private VertexInfo() { /*ここでリフレクション使ってFormatを初期化*/ }
}
2011/01/23(日) 21:16:58ID:v5GChX7G
俺MDXから入った身なんだけど、Spriteでの拡大とか回転に悩んでるんだが。
SlimDXでのDirectX9オンリーで作りたいんだけど、MDXで作ってた時みたいにSprite.Draw2DでやろうとしてもDX10/11にしか無いんだよね。
要するにSlimDXでSpriteの拡大とか回転ってどうやんの?
本家DirectXの知識は殆ど無い。
SlimDXでのDirectX9オンリーで作りたいんだけど、MDXで作ってた時みたいにSprite.Draw2DでやろうとしてもDX10/11にしか無いんだよね。
要するにSlimDXでSpriteの拡大とか回転ってどうやんの?
本家DirectXの知識は殆ど無い。
2011/01/23(日) 21:28:14ID:IvAtt79g
Transformに変換行列入れる
ネイティブのD3DXのラッパーっていうのはなんか気持ち悪いからSpriteは自作してるなあ
ネイティブのD3DXのラッパーっていうのはなんか気持ち悪いからSpriteは自作してるなあ
2011/01/23(日) 22:19:47ID:v5GChX7G
2011/01/24(月) 00:11:56ID:ZV2/0eH0
2011/01/24(月) 17:28:23ID:SbpYcvOy
サンプルを見てみたが、SpriteとTexture使った拡大とか無かったわ・・・
うーむ、俺の考え違いだったのかも知れない。やはり一から勉強しなおす必要がありそうだ。
うーむ、俺の考え違いだったのかも知れない。やはり一から勉強しなおす必要がありそうだ。
2011/01/24(月) 17:33:40ID:ZV2/0eH0
>>96
俺の場合、2Dの板ポリをGPU描画することが大半なので専用の計算をしている。
座標系が2D系と同じにすることを意図して、
Z軸のマイナス側からカメラを向ける。
そして板ポリの座標系がそれに合うようにワールド座標を設定しておく方式。
俺の場合、2Dの板ポリをGPU描画することが大半なので専用の計算をしている。
座標系が2D系と同じにすることを意図して、
Z軸のマイナス側からカメラを向ける。
そして板ポリの座標系がそれに合うようにワールド座標を設定しておく方式。
2011/01/24(月) 17:45:20ID:SbpYcvOy
>>97
なるほど、ちょっとじっくり勉強しつつ試してみます。ありです。
ただMDX見たいなDraw2Dのように簡単に拡大とか出来たりする奴はSlimDXのDX9には無いってことでいいのかな。
ずっとMDXに頼ってきて最近SlimDXに移ってきたから・・・ 無知ですみません
なるほど、ちょっとじっくり勉強しつつ試してみます。ありです。
ただMDX見たいなDraw2Dのように簡単に拡大とか出来たりする奴はSlimDXのDX9には無いってことでいいのかな。
ずっとMDXに頼ってきて最近SlimDXに移ってきたから・・・ 無知ですみません
2011/01/24(月) 18:02:45ID:ZV2/0eH0
>>98
それならなおさらD3DXSpriteを使えばいいじゃん。
それならなおさらD3DXSpriteを使えばいいじゃん。
100名前は開発中のものです。
2011/01/26(水) 21:53:12ID:q2pNSJtE 度々すまない。
俺が思ってる簡単に拡大とかって言うのは、
Sprite.Draw(位置,Rectangle,サイズ,ロケーション)
見たいなもので、それが無いのかなと甘い考えをしてた。
D3DXSpriteと言われても良く分からなかった。
もうこれで分からなかったら迷惑になりそうなので引きます・・・
俺が思ってる簡単に拡大とかって言うのは、
Sprite.Draw(位置,Rectangle,サイズ,ロケーション)
見たいなもので、それが無いのかなと甘い考えをしてた。
D3DXSpriteと言われても良く分からなかった。
もうこれで分からなかったら迷惑になりそうなので引きます・・・
101名前は開発中のものです。
2011/01/26(水) 22:59:48ID:Dys02ewd >>100
D3DXFontには変換座標かけつつ描画するモードがあるから、
たぶんSpriteにもあるはずなんだけど。
ただし、D3DXFontの場合は描画が遅くなったのであしからず。
(なぜかというと、変換かけない場合はVertexエンジンを使用せずに描画するから)
D3DXFontには変換座標かけつつ描画するモードがあるから、
たぶんSpriteにもあるはずなんだけど。
ただし、D3DXFontの場合は描画が遅くなったのであしからず。
(なぜかというと、変換かけない場合はVertexエンジンを使用せずに描画するから)
102名前は開発中のものです。
2011/01/26(水) 23:00:52ID:q2pNSJtE103名前は開発中のものです。
2011/02/21(月) 01:33:37.79ID:FjA/EdKJ SlimDX初心者です。
画像を表示するためにDirect3D9でテクスチャ表示をしようと思っているのですがどうしたら良いのか教えていただけないでしょうか?
DirectInputを利用したキーボード入力、Direct3D9を利用した背景色の設定は出来ました。
画像を表示するためにDirect3D9でテクスチャ表示をしようと思っているのですがどうしたら良いのか教えていただけないでしょうか?
DirectInputを利用したキーボード入力、Direct3D9を利用した背景色の設定は出来ました。
104名前は開発中のものです。
2011/02/21(月) 04:26:22.73ID:e+9Xrrk1 >>103
サンプルプロジェクトのソースコードを読め。
サンプルプロジェクトのソースコードを読め。
105名前は開発中のものです。
2011/02/21(月) 20:14:03.45ID:da8+AaWU106名前は開発中のものです。
2011/03/12(土) 19:58:15.04ID:gPTtXzoi age
107名前は開発中のものです。
2011/03/24(木) 15:10:27.06ID:o/XjgpCP 3DモデルのツールみたいなものをSlimDXで作ろうとしてるのですが、別ウィンドウでダイアログを
出してボタン等のコントロールを表示することってできるのですか?
出してボタン等のコントロールを表示することってできるのですか?
108名前は開発中のものです。
2011/03/24(木) 15:12:42.59ID:+jtjlJX2 もちろんできる
普通にWinFormsやWPFで作って表示すればいいだけ
というより、フォーム上に貼り付けたコントロールの上にSlimDXの描画を行う
普通にWinFormsやWPFで作って表示すればいいだけ
というより、フォーム上に貼り付けたコントロールの上にSlimDXの描画を行う
109107
2011/03/24(木) 16:52:06.20ID:o/XjgpCP Winformに配置する部分ってフォームデザイナも使えるんですか?
110名前は開発中のものです。
2011/03/24(木) 17:00:46.83ID:+jtjlJX2 使える
SlimDXで描画したい部分にはパネルでも貼り付けといて
そのウィンドウハンドルをDeviceのコンストラクタに渡せ
SlimDXで描画したい部分にはパネルでも貼り付けといて
そのウィンドウハンドルをDeviceのコンストラクタに渡せ
111107
2011/03/24(木) 17:14:42.98ID:o/XjgpCP なるほど、そのやり方でやってみます。
ありがとうございました。
ありがとうございました。
112107
2011/03/24(木) 17:48:46.54ID:o/XjgpCP フォーム表示までできたのですが、
// var form = new RenderForm("SlimDX Sample"); ←はコメントアウトして
var device = new Device(new Direct3D(), 0, DeviceType.Hardware, パネル.Handle, CreateFlags.HardwareVertexProcessing, new PresentParameters()
というやり方で合っていますでしょうか?
// var form = new RenderForm("SlimDX Sample"); ←はコメントアウトして
var device = new Device(new Direct3D(), 0, DeviceType.Hardware, パネル.Handle, CreateFlags.HardwareVertexProcessing, new PresentParameters()
というやり方で合っていますでしょうか?
113名前は開発中のものです。
2011/03/25(金) 10:54:48.65ID:L6sPV2wn SlimDXのサンプルが掲載されているWebサイトって無いですか?
海外サイトでも構いません。
海外サイトでも構いません。
114名前は開発中のものです。
2011/03/25(金) 21:09:55.09ID:vv767kg8115名前は開発中のものです。
2011/03/25(金) 21:18:59.16ID:8nQu2/1X XNACCのサンプルとDirectXSDKのサンプル(C++)が一番役立つ
116名前は開発中のものです。
2011/03/29(火) 23:06:19.15ID:7uGGHTvI 2点引っかかっている箇所があります。
どなたかヒントなどお持ちの方いらっしゃいましたら教えてください…。
@
新しいテクスチャを作る際のTexture2DDescriptionのパラメータで
Usage=Default
OptionFlags=None
CpuAccessFlags=None
この3つのどれか一つでもDefault/None/Noneから別のに変えるとnew Texture2Dのところ(*)でInvalid Callエラーが出ます
ネット上では同様の症例にたどり着けなかったのですが可能性のある原因など思い当たる方はいらっしゃいますか?
(Default/None/Noneの状態だと普通に作れます)
//////////////////////////////////////////
Texture2DDescription testTexDesc = new Texture2DDescription();
//他のパラメータ省略
testTexDesc.Usage = ResourceUsage.Default;
testTexDesc.OptionFlags = ResourceOptionFlags.None;
testTexDesc.CpuAccessFlags = CpuAccessFlags.None;
Texture2D testtex = new Texture2D(dx11Device, testTexDesc); //*
//////////////////////////////////////////
どなたかヒントなどお持ちの方いらっしゃいましたら教えてください…。
@
新しいテクスチャを作る際のTexture2DDescriptionのパラメータで
Usage=Default
OptionFlags=None
CpuAccessFlags=None
この3つのどれか一つでもDefault/None/Noneから別のに変えるとnew Texture2Dのところ(*)でInvalid Callエラーが出ます
ネット上では同様の症例にたどり着けなかったのですが可能性のある原因など思い当たる方はいらっしゃいますか?
(Default/None/Noneの状態だと普通に作れます)
//////////////////////////////////////////
Texture2DDescription testTexDesc = new Texture2DDescription();
//他のパラメータ省略
testTexDesc.Usage = ResourceUsage.Default;
testTexDesc.OptionFlags = ResourceOptionFlags.None;
testTexDesc.CpuAccessFlags = CpuAccessFlags.None;
Texture2D testtex = new Texture2D(dx11Device, testTexDesc); //*
//////////////////////////////////////////
117名前は開発中のものです。
2011/03/29(火) 23:06:29.29ID:7uGGHTvI A
テクスチャ(Texture2D)からピクセルを読み出したかったのでGetPixel的なメソッドを作っているのですが
Direct3D11以降、テクスチャのロックをするメソッドはdx11デバイスのImmediateContext.MapSubresource(〜);で正しいでしょうか?
(もしくはtex.AsSurface(〜).Map(〜)…?)
Direct3D10までのTexture2DインスタンスにはMap()メソッドがあるようなのですがDirect3D11のTexture2Dには見当たらず、調べてみたら前述のメソッドがそれっぽいような感じを受けました。
テクスチャのCpuAccessFlagを変更できないのでそのメソッドでいいのか確認できないのですが、もし定石のやり方があれば知っておきたいと思っています。
/////////環境
Windows7 64bit
Visual C# 2010 Express Edition
SlimDXのバージョンは昨日までJune 2010でした
今日March 2011にアップデートして参照設定置き換えましたが症状はまったく変化しませんでした
参照DLLはx86Verとx64Ver両方で試しましたがどちらも同じでした。
ろくに英語読めないながら海外のサイトなどをちょっと見たところでは
Win7 64bitというのがどうも相性が悪そうな感じを受けるのですが…
テクスチャ(Texture2D)からピクセルを読み出したかったのでGetPixel的なメソッドを作っているのですが
Direct3D11以降、テクスチャのロックをするメソッドはdx11デバイスのImmediateContext.MapSubresource(〜);で正しいでしょうか?
(もしくはtex.AsSurface(〜).Map(〜)…?)
Direct3D10までのTexture2DインスタンスにはMap()メソッドがあるようなのですがDirect3D11のTexture2Dには見当たらず、調べてみたら前述のメソッドがそれっぽいような感じを受けました。
テクスチャのCpuAccessFlagを変更できないのでそのメソッドでいいのか確認できないのですが、もし定石のやり方があれば知っておきたいと思っています。
/////////環境
Windows7 64bit
Visual C# 2010 Express Edition
SlimDXのバージョンは昨日までJune 2010でした
今日March 2011にアップデートして参照設定置き換えましたが症状はまったく変化しませんでした
参照DLLはx86Verとx64Ver両方で試しましたがどちらも同じでした。
ろくに英語読めないながら海外のサイトなどをちょっと見たところでは
Win7 64bitというのがどうも相性が悪そうな感じを受けるのですが…
118名前は開発中のものです。
2011/04/05(火) 18:00:52.28ID:+LS+lOHR 海外でもいいので情報交換をしてるフォーラムってないんですか?
119名前は開発中のものです。
2011/04/06(水) 02:47:44.18ID:PtBPsaxE gamedev.netはslimDX関連のスレッドをよく見かけるなぁ
120名前は開発中のものです。
2011/04/09(土) 10:55:44.62ID:sKYCeLl0 SlimDXでDirectX関連で確保したメモリは、最後に手動で開放しないと残ってしまうんですか?
121名前は開発中のものです。
2011/04/09(土) 12:36:51.53ID:QWLtEJqL うん
たしかナントカManagerみたいなのがあって
そのstaticメンバとして全てのDirectX関連のリソースへの強参照を保持してて
わざわざGCを動かなくしてる糞設計だったはず
たしかナントカManagerみたいなのがあって
そのstaticメンバとして全てのDirectX関連のリソースへの強参照を保持してて
わざわざGCを動かなくしてる糞設計だったはず
122名前は開発中のものです。
2011/04/09(土) 13:35:47.32ID:oX/gW5Mu オレは自前でリソース専用のガベコレを用意して、
明示的に解放させてるな(システムとしては参照カウンタ方式)
SlimDX付属のフレームワークもそうなってるだろ?
明示的に解放させてるな(システムとしては参照カウンタ方式)
SlimDX付属のフレームワークもそうなってるだろ?
123名前は開発中のものです。
2011/04/12(火) 16:16:23.71ID:Y/I5qVEj SlimDXにあるUnprojectってスクリーン空間からオブジェクト空間にベクトルを射影させる関数ですか?
MDXにあるUnprojectとは引数が違っている様に思うのですが、使い方が分かりません。
MDXにあるUnprojectとは引数が違っている様に思うのですが、使い方が分かりません。
124名前は開発中のものです。
2011/04/12(火) 16:22:02.28ID:155qZFtN >>123
実装を見て考えたら?
Vector3 Vector3::Unproject( Vector3 vector, float x, float y, float width, float height, float minZ, float maxZ, Matrix worldViewProjection )
{
Vector3 v;
Matrix matrix;
Matrix::Invert( worldViewProjection, matrix );
v.X = ( ( ( vector.X - x ) / width ) * 2.0f ) - 1.0f;
v.Y = -( ( ( ( vector.Y - y ) / height ) * 2.0f ) - 1.0f );
v.Z = ( vector.Z - minZ ) / ( maxZ - minZ );
Vector3::TransformCoordinate( v, matrix, v );
return v;
}
実装を見て考えたら?
Vector3 Vector3::Unproject( Vector3 vector, float x, float y, float width, float height, float minZ, float maxZ, Matrix worldViewProjection )
{
Vector3 v;
Matrix matrix;
Matrix::Invert( worldViewProjection, matrix );
v.X = ( ( ( vector.X - x ) / width ) * 2.0f ) - 1.0f;
v.Y = -( ( ( ( vector.Y - y ) / height ) * 2.0f ) - 1.0f );
v.Z = ( vector.Z - minZ ) / ( maxZ - minZ );
Vector3::TransformCoordinate( v, matrix, v );
return v;
}
125名前は開発中のものです。
2011/04/12(火) 23:28:55.22ID:4dFtS2x0 >>123
俺はこんな感じで使ってる(マウスカーソルを射影)
float z = 0.1f; //0〜1f?射影時の視点からのポイント距離
Vector3.Unproject(new Vector3((float)mouseX, (float)mouseY, z), viewport.X, viewport.Y, viewport.Width, viewport.Height, viewport.MinZ, viewport.MaxZ, mat);
最初と最後の引数以外は全部Viewportから取ってるから
Viewport持ってるなら簡単
最後のmatrixは普通にワールド*ビュー*プロジェクションのマトリクス渡す
俺はこんな感じで使ってる(マウスカーソルを射影)
float z = 0.1f; //0〜1f?射影時の視点からのポイント距離
Vector3.Unproject(new Vector3((float)mouseX, (float)mouseY, z), viewport.X, viewport.Y, viewport.Width, viewport.Height, viewport.MinZ, viewport.MaxZ, mat);
最初と最後の引数以外は全部Viewportから取ってるから
Viewport持ってるなら簡単
最後のmatrixは普通にワールド*ビュー*プロジェクションのマトリクス渡す
126名前は開発中のものです。
2011/04/22(金) 02:56:05.21ID:UveiKLLT127名前は開発中のものです。
2011/04/23(土) 17:14:08.38ID:H3hA0vRV Xファイルの中にある法線ベクトルのインデックス番号ってどうやったら取れるのですか?
頂点バッファと頂点インデックスまでは取れてます。
頂点バッファと頂点インデックスまでは取れてます。
128名前は開発中のものです。
2011/04/23(土) 18:42:03.05ID:0CpVWLj4 >>127
普通は頂点に位置とかUVとかと一緒に法線ベクトルそのものが入ってるよ。
普通は頂点に位置とかUVとかと一緒に法線ベクトルそのものが入ってるよ。
129127
2011/04/23(土) 19:33:02.95ID:H3hA0vRV >>128
ありがとうございます、法線ベクトルも取れました。
でも、せっかく取れた法線ベクトルですが、Xファイルから独自形式の(FVFで定義した)もので描画しようと思ったのですが、
法線ベクトルを頂点データに入れてもライティング効果がありませんでした。
struct VertexTex
{
public const VertexFormat Format = VertexFormat.Position | VertexFormat.Diffuse | VertexFormat.Normal;
public Vector3 Position; public int Color; public Vector3 Normal;
}
VertexTex[] vert = new VertexTex[N];
vert[n].Position = 取得した位置
vert[n].Color = 取得した色
vert[n].Normal = 取得した法線ベクトル
こんな感じで取得した情報をそのまま頂点バッファに入れています。
Xファイルから法線情報を引き継ぐにはどうしたらいいのですか?
ありがとうございます、法線ベクトルも取れました。
でも、せっかく取れた法線ベクトルですが、Xファイルから独自形式の(FVFで定義した)もので描画しようと思ったのですが、
法線ベクトルを頂点データに入れてもライティング効果がありませんでした。
struct VertexTex
{
public const VertexFormat Format = VertexFormat.Position | VertexFormat.Diffuse | VertexFormat.Normal;
public Vector3 Position; public int Color; public Vector3 Normal;
}
VertexTex[] vert = new VertexTex[N];
vert[n].Position = 取得した位置
vert[n].Color = 取得した色
vert[n].Normal = 取得した法線ベクトル
こんな感じで取得した情報をそのまま頂点バッファに入れています。
Xファイルから法線情報を引き継ぐにはどうしたらいいのですか?
130名前は開発中のものです。
2011/04/23(土) 19:55:21.49ID:0CpVWLj4 >>129
Mesh.FromFileで読み込んだMeshに、独自のVertexFormatを
後から定義したいということ?
とりあえず下の例ではXファイルから生成したMeshにNormal追加してるので参考に。
chsarpgamedev - Xファイルの描画
http://www21.atwiki.jp/csharpgamedev/pages/32.html
デバッガで法線ベクトルが正しそうな値が入っているのを確認して、かつ
固定パイプラインを使っての描画なら、ライトが正しく設定されているかを
確認したほうがいいかも。
シェーダ使ってるならシェーダ自体が間違ってる可能性も。
ちょっとこれだけでは様々な原因が推測されるので、Mesh.CreateTeapot使って
どうなるかとか、問題の切り分けが必要だと思われる。
Mesh.FromFileで読み込んだMeshに、独自のVertexFormatを
後から定義したいということ?
とりあえず下の例ではXファイルから生成したMeshにNormal追加してるので参考に。
chsarpgamedev - Xファイルの描画
http://www21.atwiki.jp/csharpgamedev/pages/32.html
デバッガで法線ベクトルが正しそうな値が入っているのを確認して、かつ
固定パイプラインを使っての描画なら、ライトが正しく設定されているかを
確認したほうがいいかも。
シェーダ使ってるならシェーダ自体が間違ってる可能性も。
ちょっとこれだけでは様々な原因が推測されるので、Mesh.CreateTeapot使って
どうなるかとか、問題の切り分けが必要だと思われる。
131127
2011/04/25(月) 10:49:59.48ID:xz94dpYm 上記のソースの一部を削除したらライティング処理ができました。
削除した所
//VertexFormat.Diffuse
//vert[n].Color = 取得した色
//public int Color
原因は、頂点データに色を付加してたからみたいです。
色は、別途マテリアルを適用させないといけなかったんですね。
削除した所
//VertexFormat.Diffuse
//vert[n].Color = 取得した色
//public int Color
原因は、頂点データに色を付加してたからみたいです。
色は、別途マテリアルを適用させないといけなかったんですね。
132名前は開発中のものです。
2011/04/26(火) 08:04:30.89ID:cWfiSBLo Direct3D10/Direct3D11の詳細デバッグのやり方
ネイティブのDirectXとSlimDXの相関についてよく分かってなかったので検索しても把握できてなかった・・・
レベル低い話だけど、今後同じところで引っかかる人がいたときのために書いときます
つっこみ所あったら是非つっこんでください
@DebugViewダウンロード(VisualStudio Expressの場合。上位版は要らないらしい)
ADirectX SDKと一緒にインストールされるUtilitiesのDirectX ControlPanel起動
BDirectX 10.x/11タブのEdit Listにデバッグしたいプロジェクトのbin\Debug\フォルダあたりにある「.vshost.exe」拡張子のファイルを追加
CDebug LayerをForce On
DDebugView起動
EC# Expressで普通にビルド→DebugView確認
…でもWpfとSlimDX連携させたプロジェクトはこれでもちゃんとデバッグが出力されなかった…
なのでSlimDXのSampleを改造してデバッグ時に引っかかる問題の箇所だけ再現してデバッグしてます
ネイティブのDirectXとSlimDXの相関についてよく分かってなかったので検索しても把握できてなかった・・・
レベル低い話だけど、今後同じところで引っかかる人がいたときのために書いときます
つっこみ所あったら是非つっこんでください
@DebugViewダウンロード(VisualStudio Expressの場合。上位版は要らないらしい)
ADirectX SDKと一緒にインストールされるUtilitiesのDirectX ControlPanel起動
BDirectX 10.x/11タブのEdit Listにデバッグしたいプロジェクトのbin\Debug\フォルダあたりにある「.vshost.exe」拡張子のファイルを追加
CDebug LayerをForce On
DDebugView起動
EC# Expressで普通にビルド→DebugView確認
…でもWpfとSlimDX連携させたプロジェクトはこれでもちゃんとデバッグが出力されなかった…
なのでSlimDXのSampleを改造してデバッグ時に引っかかる問題の箇所だけ再現してデバッグしてます
133名前は開発中のものです。
2011/05/16(月) 10:40:24.35ID:XD0rb09K プログラムを終了した時に出力ウィンドウに出てくる下記のメッセージは何を表しているのですか?
Object of type SlimDX.Direct3D9.Mesh was not disposed. Stack trace of object creation:
・・・
Total of 11 objects still alive.
Object of type SlimDX.Direct3D9.Mesh was not disposed. Stack trace of object creation:
・・・
Total of 11 objects still alive.
134名前は開発中のものです。
2011/05/16(月) 10:52:18.79ID:vb2M0wfD リソースリークしてるぞってこと
Dispose忘れ
Dispose忘れ
135133
2011/05/16(月) 11:28:05.55ID:XD0rb09K なるほど、Disposeやっていませんでした。
ありがとうございます。
ありがとうございます。
136名前は開発中のものです。
2011/05/16(月) 15:04:59.03ID:SgNiWRkk あ、最近のSlimDXはそんなこと教えてくれるのね。
対応するDirectX再頒布パッケージが強制的に新しくなっちゃうから、
長らく更新してないわ……。
対応するDirectX再頒布パッケージが強制的に新しくなっちゃうから、
長らく更新してないわ……。
137名前は開発中のものです。
2011/05/16(月) 22:48:14.86ID:pYSUjBPJ Dx11でコンピュートシェーダにMatrixを渡すにはどうすればいいんでしょうか?
ImmediateContext.ComputeShaderにはSetMatrix()のようなメソッドがなく、
コンピュートシェーダの.hlslファイルからfx_5_0プロファイルで無理やりEffectを作ってそこに渡してもシェーダー側には渡っていないようです。
ImmediateContext.ComputeShaderにはSetMatrix()のようなメソッドがなく、
コンピュートシェーダの.hlslファイルからfx_5_0プロファイルで無理やりEffectを作ってそこに渡してもシェーダー側には渡っていないようです。
138137
2011/05/16(月) 23:23:29.97ID:pYSUjBPJ すいません、普通にサンプルの中に参考がありました…。
139名前は開発中のものです。
2011/05/20(金) 13:29:58.03ID:GMn5NHik slimDXで使えるFBXやColladaのローダはないでしょうか?
140名前は開発中のものです。
2011/07/11(月) 12:42:43.89ID:piNnRBf/ 描画エリアのリサイズをしようと思って、
PresentParameters pp = new PresentParameters()
{
BackBufferWidth = FormWidth, // フォームの幅と高さ
BackBufferHeight = FormHeight,
};
device.Reset(pp);
で実行したら、
D3DERR_INVALIDCALL: Invalid call (-2005530516)
というエラーが出ました。
ウィンドウモードでリサイズをするにはどうしたらいいのですか?
PresentParameters pp = new PresentParameters()
{
BackBufferWidth = FormWidth, // フォームの幅と高さ
BackBufferHeight = FormHeight,
};
device.Reset(pp);
で実行したら、
D3DERR_INVALIDCALL: Invalid call (-2005530516)
というエラーが出ました。
ウィンドウモードでリサイズをするにはどうしたらいいのですか?
141名前は開発中のものです。
2011/07/11(月) 14:51:54.45ID:ZpoF+bdP >>140
リソースの開放忘れ。
リソースの開放忘れ。
143名前は開発中のものです。
2011/08/07(日) 18:11:18.22ID:XCPITJXM あげ
144名前は開発中のものです。
2011/08/15(月) 13:06:42.87ID:dzreDaU2 そういえば、SlimDXでDirectX11による開発ってできるんですかね?
むしろVista以降をターゲットにした開発および開発環境整えた猛者はいますか?
むしろVista以降をターゲットにした開発および開発環境整えた猛者はいますか?
145名前は開発中のものです。
2011/08/16(火) 16:45:27.23ID:7U3gvwlZ Vista以降をターゲットにするなら、SlimDXよりもMS謹製のライブラリのほうがいいと思うよ。
サポートされる範囲も多いし。
サポートされる範囲も多いし。
146名前は開発中のものです。
2011/08/18(木) 14:49:10.00ID:u3BnXhrZ SlimDXのソースって公式以外であまりアップされていないですか?
147名前は開発中のものです。
2011/08/18(木) 16:52:55.02ID:Hrsxw23E >>146
なぜ公式以外がアプデートする必要がある?
なぜ公式以外がアプデートする必要がある?
148146
2011/08/18(木) 17:23:27.29ID:u3BnXhrZ 本体のソースではなくて、slimdxで作られたソースの方です。
Web上にslimdxで作成されたサンプルが無いのかなと思ったのです。
Web上にslimdxで作成されたサンプルが無いのかなと思ったのです。
149名前は開発中のものです。
2011/08/28(日) 15:01:11.18ID:EyimipZI XPでSlimDXは使えますか?
付属のサンプルを動かそうとしたらInitializeDeviceの行のところで決まって
D3DERR_INVALIDCALL: Invalid call (-2005530516)やSEHExceptionのエラーが出るんですが
付属のサンプルを動かそうとしたらInitializeDeviceの行のところで決まって
D3DERR_INVALIDCALL: Invalid call (-2005530516)やSEHExceptionのエラーが出るんですが
150名前は開発中のものです。
2011/08/28(日) 15:56:23.92ID:QGmHgfHf 使えます
152名前は開発中のものです。
2011/09/03(土) 11:47:13.02ID:vPbwbx1g DirectXがちゃんとインスコできてないとか
153名前は開発中のものです。
2012/01/30(月) 16:24:33.63ID:fTr7E4NX SlimDX.dllをアプリと一緒に配布するときには
readme.txtか何かにライセンスの文章を載せておかないとだめでしょうか?
readme.txtか何かにライセンスの文章を載せておかないとだめでしょうか?
154名前は開発中のものです。
2012/01/31(火) 16:42:12.82ID:cvEf5Ssb155名前は開発中のものです。
2012/01/31(火) 16:56:33.72ID:hy1DRM+Q ついでにすみませんが、これって商用もOKなんですか?
156名前は開発中のものです。
2012/04/17(火) 23:24:32.29ID:o6MO9aSs ダウンロードした
157名前は開発中のものです。
2012/04/17(火) 23:33:26.46ID:o6MO9aSs SharpDXとどっちがいいの?
158名前は開発中のものです。
2012/04/18(水) 03:35:51.12ID:zzmnGwMP これダウンロードしたんだけど、サンプルフォルダがない
公式にもそれらしいのがないし、一気にヤル気失せた
公式にもそれらしいのがないし、一気にヤル気失せた
159名前は開発中のものです。
2012/04/18(水) 23:07:44.56ID:jD8EzovV160名前は開発中のものです。
2012/04/19(木) 00:15:36.93ID:QU9JTAnb 気になったので見てみたら最新のSDKには存在しないね
161名前は開発中のものです。
2012/04/20(金) 11:58:58.37ID:MteNe/qx >>157
個人でSlimDXで開発してた人もSharpDXに移り始めてるし
有名なライブラリや描画エンジンでもSharpDXが使われているので
これからはSharpDXが主流になりそうだよ
まあこのスレでSharpDXの話をするのもなんだし
SharpDXのスレたててもいいかもね
日本語の情報がほとんど無いから情報交換にも良いと思う
個人でSlimDXで開発してた人もSharpDXに移り始めてるし
有名なライブラリや描画エンジンでもSharpDXが使われているので
これからはSharpDXが主流になりそうだよ
まあこのスレでSharpDXの話をするのもなんだし
SharpDXのスレたててもいいかもね
日本語の情報がほとんど無いから情報交換にも良いと思う
162名前は開発中のものです。
2012/04/20(金) 16:00:08.27ID:HYMavAP6 >>161
SlimDXと比較して、SharpDXってどんなところがいいの?
SlimDXと比較して、SharpDXってどんなところがいいの?
163名前は開発中のものです。
2012/04/20(金) 16:22:25.33ID:DWIKZtqP ランタイムが要らない
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】トランプ大統領、中国の習近平国家主席を「国賓」として招待することに ★3 [ニョキニョキ★]
- 【速報】トランプ大統領、中国の習近平国家主席を「国賓」として招待することに ★4 [ニョキニョキ★]
- 日本と中国を結ぶ12航空路線で全便欠航 中国人に最も人気の海外旅行先は日本から韓国に ★2 [ぐれ★]
- 【東京・足立の車暴走】赤信号無視か 危険運転致死傷疑いも視野に捜査 逮捕された職業不詳の男性(37)は精神疾患で通院歴も ★3 [ぐれ★]
- 防衛費増額「賛成」62・8% 「反対」32・2%を大きく上回る 賛成「18~29歳で8割」世代差あらわ 産経FNN合同世論調査 ★3 [尺アジ★]
- 【テレビ】鈴木福&あのちゃんW主演 テレ東で押見修造氏の漫画『惡の華』実写ドラマ化決定! 累計325万部を突破した伝説的漫画 [冬月記者★]
- 【実況】博衣こよりのえちえち朝こよ🧪★2
- 【実況】博衣こよりのえちえち朝こよ🧪
- 【悲報】小野田紀美さん、宇宙人みたいな服を着てしまう…また、そのことを突っ込まれブチ切れ中www [856698234]
- 【悲報】セブンイレブンの納豆巻きの値段、限界突破wwwwwwwwwwwwwwwwww [977261419]
- 🏡
- お前らっていつもここにいるよな
