SlimDXについて語ろうぜ
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2010/01/31(日) 10:41:21ID:uYVfFOYkhttp://slimdx.org/
日本語の解説
http://mainori-se.sakura.ne.jp/slimdxwiki/
SlimDX は、.NET Framework に対応した言語(C#、VB.NET など)を使って
DirectX アプリケーションを開発することができるオープンソースのライブラリ(DLL)です。
0102名前は開発中のものです。
2011/01/26(水) 23:00:52ID:q2pNSJtEなるほど。試してみます。
お騒がせしました
0103名前は開発中のものです。
2011/02/21(月) 01:33:37.79ID:FjA/EdKJ画像を表示するためにDirect3D9でテクスチャ表示をしようと思っているのですがどうしたら良いのか教えていただけないでしょうか?
DirectInputを利用したキーボード入力、Direct3D9を利用した背景色の設定は出来ました。
0104名前は開発中のものです。
2011/02/21(月) 04:26:22.73ID:e+9Xrrk1サンプルプロジェクトのソースコードを読め。
0105名前は開発中のものです。
2011/02/21(月) 20:14:03.45ID:da8+AaWUとりあえずこのへん
http://www21.atwiki.jp/csharpgamedev/pages/18.html
0106名前は開発中のものです。
2011/03/12(土) 19:58:15.04ID:gPTtXzoi0107名前は開発中のものです。
2011/03/24(木) 15:10:27.06ID:o/XjgpCP出してボタン等のコントロールを表示することってできるのですか?
0108名前は開発中のものです。
2011/03/24(木) 15:12:42.59ID:+jtjlJX2普通にWinFormsやWPFで作って表示すればいいだけ
というより、フォーム上に貼り付けたコントロールの上にSlimDXの描画を行う
0109107
2011/03/24(木) 16:52:06.20ID:o/XjgpCP0110名前は開発中のものです。
2011/03/24(木) 17:00:46.83ID:+jtjlJX2SlimDXで描画したい部分にはパネルでも貼り付けといて
そのウィンドウハンドルをDeviceのコンストラクタに渡せ
0111107
2011/03/24(木) 17:14:42.98ID:o/XjgpCPありがとうございました。
0112107
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()
というやり方で合っていますでしょうか?
0113名前は開発中のものです。
2011/03/25(金) 10:54:48.65ID:L6sPV2wn海外サイトでも構いません。
0114名前は開発中のものです。
2011/03/25(金) 21:09:55.09ID:vv767kg8ウィンドウハンドルを入れるところは合ってるけど、色んなものが抜けてる。
とりあえずDirect3Dオブジェクトを外に出して、更にPresentParametersに
適切な値を設定するところから。
>>113
ttp://www21.atwiki.jp/csharpgamedev/pages/18.html
あとSlimDX SDKのサンプル。
0115名前は開発中のものです。
2011/03/25(金) 21:18:59.16ID:8nQu2/1X0116名前は開発中のものです。
2011/03/29(火) 23:06:19.15ID:7uGGHTvIどなたかヒントなどお持ちの方いらっしゃいましたら教えてください…。
@
新しいテクスチャを作る際の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); //*
//////////////////////////////////////////
0117名前は開発中のものです。
2011/03/29(火) 23:06:29.29ID:7uGGHTvIテクスチャ(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というのがどうも相性が悪そうな感じを受けるのですが…
0118名前は開発中のものです。
2011/04/05(火) 18:00:52.28ID:+LS+lOHR0119名前は開発中のものです。
2011/04/06(水) 02:47:44.18ID:PtBPsaxE0120名前は開発中のものです。
2011/04/09(土) 10:55:44.62ID:sKYCeLl00121名前は開発中のものです。
2011/04/09(土) 12:36:51.53ID:QWLtEJqLたしかナントカManagerみたいなのがあって
そのstaticメンバとして全てのDirectX関連のリソースへの強参照を保持してて
わざわざGCを動かなくしてる糞設計だったはず
0122名前は開発中のものです。
2011/04/09(土) 13:35:47.32ID:oX/gW5Mu明示的に解放させてるな(システムとしては参照カウンタ方式)
SlimDX付属のフレームワークもそうなってるだろ?
0123名前は開発中のものです。
2011/04/12(火) 16:16:23.71ID:Y/I5qVEjMDXにあるUnprojectとは引数が違っている様に思うのですが、使い方が分かりません。
0124名前は開発中のものです。
2011/04/12(火) 16:22:02.28ID:155qZFtN実装を見て考えたら?
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;
}
0125名前は開発中のものです。
2011/04/12(火) 23:28:55.22ID:4dFtS2x0俺はこんな感じで使ってる(マウスカーソルを射影)
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は普通にワールド*ビュー*プロジェクションのマトリクス渡す
0126名前は開発中のものです。
2011/04/22(金) 02:56:05.21ID:UveiKLLT今時、搭載メモリ8G12GB16GBはあたりまえだから、あんまり気にしなくていいんじゃないかな。
0127名前は開発中のものです。
2011/04/23(土) 17:14:08.38ID:H3hA0vRV頂点バッファと頂点インデックスまでは取れてます。
0128名前は開発中のものです。
2011/04/23(土) 18:42:03.05ID:0CpVWLj4普通は頂点に位置とかUVとかと一緒に法線ベクトルそのものが入ってるよ。
0129127
2011/04/23(土) 19:33:02.95ID:H3hA0vRVありがとうございます、法線ベクトルも取れました。
でも、せっかく取れた法線ベクトルですが、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ファイルから法線情報を引き継ぐにはどうしたらいいのですか?
0130名前は開発中のものです。
2011/04/23(土) 19:55:21.49ID:0CpVWLj4Mesh.FromFileで読み込んだMeshに、独自のVertexFormatを
後から定義したいということ?
とりあえず下の例ではXファイルから生成したMeshにNormal追加してるので参考に。
chsarpgamedev - Xファイルの描画
http://www21.atwiki.jp/csharpgamedev/pages/32.html
デバッガで法線ベクトルが正しそうな値が入っているのを確認して、かつ
固定パイプラインを使っての描画なら、ライトが正しく設定されているかを
確認したほうがいいかも。
シェーダ使ってるならシェーダ自体が間違ってる可能性も。
ちょっとこれだけでは様々な原因が推測されるので、Mesh.CreateTeapot使って
どうなるかとか、問題の切り分けが必要だと思われる。
0131127
2011/04/25(月) 10:49:59.48ID:xz94dpYm削除した所
//VertexFormat.Diffuse
//vert[n].Color = 取得した色
//public int Color
原因は、頂点データに色を付加してたからみたいです。
色は、別途マテリアルを適用させないといけなかったんですね。
0132名前は開発中のものです。
2011/04/26(火) 08:04:30.89ID:cWfiSBLoネイティブの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を改造してデバッグ時に引っかかる問題の箇所だけ再現してデバッグしてます
0133名前は開発中のものです。
2011/05/16(月) 10:40:24.35ID:XD0rb09KObject of type SlimDX.Direct3D9.Mesh was not disposed. Stack trace of object creation:
・・・
Total of 11 objects still alive.
0134名前は開発中のものです。
2011/05/16(月) 10:52:18.79ID:vb2M0wfDDispose忘れ
0135133
2011/05/16(月) 11:28:05.55ID:XD0rb09Kありがとうございます。
0136名前は開発中のものです。
2011/05/16(月) 15:04:59.03ID:SgNiWRkk対応するDirectX再頒布パッケージが強制的に新しくなっちゃうから、
長らく更新してないわ……。
0137名前は開発中のものです。
2011/05/16(月) 22:48:14.86ID:pYSUjBPJImmediateContext.ComputeShaderにはSetMatrix()のようなメソッドがなく、
コンピュートシェーダの.hlslファイルからfx_5_0プロファイルで無理やりEffectを作ってそこに渡してもシェーダー側には渡っていないようです。
0138137
2011/05/16(月) 23:23:29.97ID:pYSUjBPJ0139名前は開発中のものです。
2011/05/20(金) 13:29:58.03ID:GMn5NHik0140名前は開発中のものです。
2011/07/11(月) 12:42:43.89ID:piNnRBf/PresentParameters pp = new PresentParameters()
{
BackBufferWidth = FormWidth, // フォームの幅と高さ
BackBufferHeight = FormHeight,
};
device.Reset(pp);
で実行したら、
D3DERR_INVALIDCALL: Invalid call (-2005530516)
というエラーが出ました。
ウィンドウモードでリサイズをするにはどうしたらいいのですか?
0141名前は開発中のものです。
2011/07/11(月) 14:51:54.45ID:ZpoF+bdPリソースの開放忘れ。
0143名前は開発中のものです。
2011/08/07(日) 18:11:18.22ID:XCPITJXM0144名前は開発中のものです。
2011/08/15(月) 13:06:42.87ID:dzreDaU2むしろVista以降をターゲットにした開発および開発環境整えた猛者はいますか?
0145名前は開発中のものです。
2011/08/16(火) 16:45:27.23ID:7U3gvwlZサポートされる範囲も多いし。
0146名前は開発中のものです。
2011/08/18(木) 14:49:10.00ID:u3BnXhrZ0147名前は開発中のものです。
2011/08/18(木) 16:52:55.02ID:Hrsxw23Eなぜ公式以外がアプデートする必要がある?
0148146
2011/08/18(木) 17:23:27.29ID:u3BnXhrZWeb上にslimdxで作成されたサンプルが無いのかなと思ったのです。
0149名前は開発中のものです。
2011/08/28(日) 15:01:11.18ID:EyimipZI付属のサンプルを動かそうとしたらInitializeDeviceの行のところで決まって
D3DERR_INVALIDCALL: Invalid call (-2005530516)やSEHExceptionのエラーが出るんですが
0150名前は開発中のものです。
2011/08/28(日) 15:56:23.92ID:QGmHgfHf0152名前は開発中のものです。
2011/09/03(土) 11:47:13.02ID:vPbwbx1g■ このスレッドは過去ログ倉庫に格納されています