DirectX C# vol.1
■ このスレッドは過去ログ倉庫に格納されています
0412デフォルトの名無しさん
NGNGでもC#+ManagedDirectXは確実にC+++DirectXのときより楽ですよ。
C++で美しいコード書けるスキルがないからかも知れませんが……。
0413407
NGNGええ、そのとおりですね。
そこで試してみました。
結果、408の前者の方が後者より1.5倍ほど処理時間がかかっていました。
こんなに変わるものなんでしょうか……ちょっと驚きです。
0414407
NGNGvertexBuffer =new VertexBuffer[50000];
Random rand=new Random();
CustomVertex.TransformedColored[] verts = new CustomVertex.TransformedColored[5];
GraphicsStream stm=null;
for (int i=0;i<50000;i++)
{
vertexBuffer[i]=new VertexBuffer(typeof(CustomVertex.TransformedColored), 5, device, 0, CustomVertex.TransformedColored.Format, Pool.Default);
stm = vertexBuffer[i].Lock(0, 0, 0);
verts[0].X=rand.Next(200);verts[0].Y=rand.Next(200);verts[0].Z=(float)rand.NextDouble(); verts[0].Rhw=1; verts[0].Color = System.Drawing.Color.Red.ToArgb();
verts[1].X=rand.Next(200);verts[0].Y=rand.Next(200);verts[0].Z=(float)rand.NextDouble(); verts[0].Rhw=1; verts[0].Color = System.Drawing.Color.Red.ToArgb();
verts[2].X=rand.Next(200);verts[0].Y=rand.Next(200);verts[0].Z=(float)rand.NextDouble(); verts[0].Rhw=1; verts[0].Color = System.Drawing.Color.Red.ToArgb();
verts[3].X=rand.Next(200);verts[0].Y=rand.Next(200);verts[0].Z=(float)rand.NextDouble(); verts[0].Rhw=1; verts[0].Color = System.Drawing.Color.Red.ToArgb();
verts[4]=verts[0];
stm.Write(verts);
vertexBuffer[i].Unlock();
}
stm.Close();
0415407
NGNG[レンダーステート変更節約バージョン]
protected override void Render()
{
long time=DateTime.Now.Ticks;
device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.White, 1.0f, 0);
device.BeginScene();
device.VertexFormat = CustomVertex.TransformedColored.Format;
device.RenderState.CullMode=Cull.None;
device.RenderState.ShadeMode=ShadeMode.Flat;
device.RenderState.ColorWriteEnable=0;
for(int i=0;i<50000;i++)
{
device.SetStreamSource( 0, vertexBuffer[i], 0);
device.DrawPrimitives(PrimitiveType.TriangleFan, 0, 2);
}
device.RenderState.ShadeMode=ShadeMode.Gouraud;
device.RenderState.ColorWriteEnable=ColorWriteEnable.RedGreenBlueAlpha;
for(int i=0;i<50000;i++)
{
device.SetStreamSource( 0, vertexBuffer[i], 0);
device.DrawPrimitives(PrimitiveType.LineStrip, 0, 4);
}
device.EndScene();
time=DateTime.Now.Ticks-time;
Console.WriteLine("{0}",time);
}
0416デフォルトの名無しさん
NGNGprotected override void Render()
{
long time=DateTime.Now.Ticks;
device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.White, 1.0f, 0);
device.BeginScene();
device.VertexFormat = CustomVertex.TransformedColored.Format;
device.RenderState.CullMode=Cull.None;
for(int i=0;i<50000;i++)
{
device.RenderState.ShadeMode=ShadeMode.Flat;
device.RenderState.ColorWriteEnable=0;
device.SetStreamSource( 0, vertexBuffer[i], 0);
device.DrawPrimitives(PrimitiveType.TriangleFan, 0, 2);
device.RenderState.ShadeMode=ShadeMode.Gouraud;
device.RenderState.ColorWriteEnable=ColorWriteEnable.RedGreenBlueAlpha;
device.DrawPrimitives(PrimitiveType.LineStrip, 0, 4);
}
device.EndScene();
time=DateTime.Now.Ticks-time;
Console.WriteLine("{0}",time);
}
0417407
NGNGAthlonXP1700+
1024MB_DDR333
Radeon9000
の環境で、>>415が1フレーム1200msec程度、>>416が1700msec程度でした。
検証というには中途半端なので報告しようかどうしようか迷ったのですが、一応書いてみました。
0418デフォルトの名無しさん
NGNGC++のから学んで、C#のを学んだほうが早いです?
C#のものは、まだ資料が少ないらしいですが、
C++は資料が充実しているので。
0419デフォルトの名無しさん
NGNG難しいな。
VC++でelとかのライブラリ使えばDirectXの面倒な部分は覚えなくていいからそれが一番楽かもしれない。
C++やったことあるならC++用のソース読みながらそれっぽい関数をManagedDirectXで探して試して覚えれば、
DirectXの泥臭い部分に悩まされにくいからC++で一から覚えるより楽かもしれない。
C#自体は簡単だし、ManagedDirectXは新しくつくっただけあってすっきりしてるし、.netフレームワークの恩恵も受けやすいし。
C++でDirectXも直接触るなら、資料が豊富なのはナイス。MFCとかわかってて、DirectX使わないアプリならVC++で書けるってんなら、
覚えるのがDirectXだけですむ分楽、かなあ。
どこまでやるかとか、時間の多寡とかによるんじゃないかな。
ManagedDirectXのヘルプがもっとしっかりしてたら迷わず推せるんだけど。
0420418
NGNGなるほど。しばらくたてばC#のものの資料も充実してくるでしょうし、
がんばってC#のものを学習しようと思います。
0421デフォルトの名無しさん
NGNG4GB VC-SDRAM
wildcat3-6210 416MB
の環境で、>>415が1フレーム500msec程度、>>416が700msec程度でした。
検証というには中途半端なので報告しようかどうしようか迷ったのですが、
一応書いてみました。
0422デフォルトの名無しさん
NGNG0423デフォルトの名無しさん
NGNGC\DXSDKは8.0がインストールされてるからディレクトリ変えろと表示されるのですが
C\DXSDKにインストールするにはレジストリエディタ使うしか方法はないでしょうか?
0424デフォルトの名無しさん
NGNGC:\DXSDK\ でなく C:\DXSDK9\ とかにインストすればいいじゃん。
0425初心者
NGNGVol.1」 を買ってきたのですが、Xファイルを読み込んで処理を行うサンプルが
ありませんでした。
5章の関節を動かすサンプルを改造して、手足のパーツをDoGAで作成した
Xファイルのデータに、置き換えようと試みたのですが、どーやっていいのか、
さっぱりわかりません。
同じようなことをやったて成功した方いらっしゃいますか?
どこかにサンプル or 解説がありましたら、教えていただけると助かります。
0426デフォルトの名無しさん
NGNG本の方では頂点バッファで描画しているところを、XファイルのMeshを描画する
ように変更すれば、出来そうな気がする。
DX9 SDKのTutorial 6を解析すれば、どうすれば良いか判ると思われ。
0427デフォルトの名無しさん
NGNGVC++のDirectx9のスプライトについて質問なのですが
DX9・VC++スレがないので
ここで質問させていただきます。
D3DXCreateTextureFromFileEx関数で
画像からテクスチャを作成するとき
高さと幅を指定できるのですが
250を超えると
高さと幅が一気に大きくなってしまい
うまく指定できません。
どうすれば250以上の大きさにできるでしょうか。
スレ違いのところ大変もうしわけないのですが
ご教授ください。
0428デフォルトの名無しさん
NGNG0429デフォルトの名無しさん
NGNG0430デフォルトの名無しさん
NGNGじゃまずいのですか、、
色々試してみますね。
駄目だったらまたきます。
0431デフォルトの名無しさん
NGNGありがとうございました。
0432デフォルトの名無しさん
NGNGXファイル以外から生成したMeshにTextureを貼る方法が分かりません。
具体的には Mesh.Cylinder()で作った円柱の側面にTextureを貼りたいのですが・・・
0433デフォルトの名無しさん
NGNG0434デフォルトの名無しさん
NGNG0435デフォルトの名無しさん
NGNGププププププ。
0436デフォルトの名無しさん
NGNG手を出せないスパゲティープログラマが
ちょっかいだしにくるんだね。
0437デフォルトの名無しさん
NGNG0438デフォルトの名無しさん
NGNGほっといて、先に行こう。
0439初心者
NGNGDX9 SDKのTutorial 6 って読み込んだメッシュのデータが動いてるんじゃなくて、
視点が動いてるように見えるけど、それでいいのかな?
この虎?の方を動かしたいんだけど、どーやったらいいのかな?
0440デフォルトの名無しさん
NGNGworldを弄くればいいんでない。
0441デフォルトの名無しさん
NGNG0442デフォルトの名無しさん
NGNG気持ちはわかるけど、あれでいいのだ。
device.Transform.WorldはWorld座標系への変換マトリックスなのだ。
一つオブジェクトをレンダリングするたびにセットして使うものなのだ。
オブジェクトの位置は変えずに一つずつ視点を変えて描画してると考えてもいいのかもしれない。
と、思うのだ。間違ってたらゴメンソ。
0443初心者
NGNG> オブジェクトの位置は変えずに一つずつ視点を変えて描画してると考えてもいいのかもしれない。
そうすると、やっぱりカメラが動いてるというイメージになってしまう。
基本的なとこで勘違いしてるのかな、もう一度、ソースをながめてみるっす。
0444デフォルトの名無しさん
NGNGDOGAってやつはボーン入りXファイル生成できるの?
できないなら自分でボーン設定すること。動かすのはそれから。
断言しないけど多分初心者にはいきなりは無理。嫌味じゃなくて。
0445初心者
NGNGDX9 SDKのTutorial 6 の中にある meshes.cs の SetupMatrices メソッドで
カメラの位置を変えているように見えます。
カメラの視点を変えずに、オブジェクトを動かすには、読み込んだXファイルの
頂点の座標の情報に、何らかの変換を加えないといけないように思うのですが、
なんか根本的に勘違いしているでしょうか?
3Dってちゃんと勉強しないと、適当にはできないんですねぇ (^^;
0446初心者
NGNGやっぱ、初心者にいきなりは無理でしたか。
単純に回転させるのも、ボーン設定しないとだめなんですか?
0447デフォルトの名無しさん
NGNG0448初心者
NGNGオブジェクトの形が変形しないことを前提に、そのオブジェクトの原点を元に、
XYZの各軸で回転させることができる、と考えていいのでしょうか。
0449デフォルトの名無しさん
NGNG0450デフォルトの名無しさん
NGNGチュートリアル6よりも前に
worldを扱うチュートリアルなかったっけ?
0451初心者
NGNG少しわかりました。
device.Transform.World に、各オブジェクトの変換マトリックス(?)を渡して
レンダリングすればいいってことですね。
0452デフォルトの名無しさん
NGNGスレッドを闇雲に上げないように。
0454デフォルトの名無しさん
NGNG0455デフォルトの名無しさん
NGNGもっと将来性とかの話について議論しれ
0456デフォルトの名無しさん
NGNGここを何の板だと思ってますか、キミは。
0457デフォルトの名無しさん
NGNG0458デフォルトの名無しさん
NGNGそうそう。
そういうこと。
0459山崎渉
NGNG0460デフォルトの名無しさん
NGNG0461デフォルトの名無しさん
NGNGhttp://www.borland.co.jp/delphi/personal/
0462デフォルトの名無しさん
NGNGVisual C#起動。
「新しいプロジェクト」からDirectX9 Visual C# Wizardを使ってのコード生成。
とりあえず、初期設定のまま。
そしたら…
.NETアセンブリ'Microsoft.DirectX.dll'が見つかりませんでした。
という警告文が。
再インストールしても直りませんでした。
どうしてでしょうか?
0463デフォルトの名無しさん
NGNGこのスレ読み返してみて。
0464デフォルトの名無しさん
NGNGManagedDirectXのインストールに失敗してるか、参照設定できてないか。
C:\Windows\Microsoft.NET\Managed DirectX\ってフォルダができてるかどうか確かめて見れ。
できてたら手動でこのフォルダ内のDLLファイルを参照追加してやればいいはず。
うちはノートにインストしたときどうしてもうまくいかなかったんで、他からコピーした。
0465462
NGNG自分、過去にはDirectX9SDK使ったことがあった(その後、理由があってアンインストールしました)んですが
そのときのが残っていたのか、
C:\Windows\LastGood\Microsoft.NET\Managed DirectX\ フォルダから各種dllが見つかったんで
とりあえずはそれらを引っ張り出して使おうかと思います。
レスありがとうございました。
0466山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0467山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0468デフォルトの名無しさん
NGNG教えてください。まったくの素人です。
ジョイスティック(フォースフィードバック有)(Microsoft(R) SideWinder(R) Force Feedback 2)を使っての質問です。
スティックを軽く握った状態(ジョイスティックはON状態)で、PC側からスティック側に位置情報の命令を出し、
スティックを動かすことは可能なのでしょうか?(VC++とDirectXで)
簡単に書くと、PCからジョイスティックを制御できるかどうか?なんです。
よろしくお願いします。
0469デフォルトの名無しさん
NGNGでダイアログを表示しようと思ったのですが
スタイルにチャイルドを指定すると表示しなくなるのです。
どうすればチャイルドでも表示させれるでしょうか。
0470bloom
NGNG0471デフォルトの名無しさん
NGNGジョイスティックを動かす????
フォースフィードバックで振動させることくらいならできるけれども…
そもそもジョイスティックを動かしてどうするのだね?
# コンピュータの世界では「初心者」「素人」などの言葉は禁句です。
0472デフォルトの名無しさん
NGNGそれよりC#スレでVC++の質問してるところにツッコミいれるべきかと
0473デフォルトの名無しさん
NGNG教えてください。まったくの素人です。
キーボード(Microsoft Natural Keyboard)を使っての質問です。
ホームポジションに手を置いた状態で、
PC側からキーのオンオフの情報の命令を出し、
キーを上下させることは可能なのでしょうか?(VC++とDirectXで)
簡単に書くと、PCからキーボードを制御できるかどうか?なんです。
よろしくお願いします。
0474デフォルトの名無しさん
NGNGそのサイドワインダーてのは、自動でステックが動かす機能がついてるのか?
まあ、ついてる意味が無いから無理だな
0475デフォルトの名無しさん
NGNGc++の方がいいだろ
遅そう
0476デフォルトの名無しさん
NGNGそのMicrosoft Natural Keyboardてのは、自動でキーを動かす機能がついてるのか?
まあ、ついてる意味が無いから無理だな
0477デフォルトの名無しさん
NGNG重くなるのはモーターを回して負荷を与えてるだけ
サイドワインダーのステック自体は動かない
どの機種について言ってるんだ?
0478468
NGNGありがとうございます。
無理みたいですね。質問自体変なのかもしれません。
スティックを例えば右に倒したとします。
そこで力を抜いてもPC側でその位置を保持するという命令を出したら保持したり、
そこからPC側で左に傾けるという命令を出したらスティックが左に傾いたりしないのかなと・・・。
0479デフォルトの名無しさん
NGNGそもそもモーター2個はいってて制御してるんだから後はDirectInputが対応してるかどうかの問題では?
とりあえず直立させることはヘルプ見たらできるって書いてあるぞ
0480デフォルトの名無しさん
NGNGだから元からその機能があって命令が分かればたぶんできるよ
元から無い機能は制御できない
0481デフォルトの名無しさん
NGNG> この動きは家庭用ゲーム機のコントローラーのように単に
> 振動するといったものではなく、ゲームを開発する側が
> 自由に動きをプログラミングできる。
数名ほど、頭が固い人間がいるようだな。
0482デフォルトの名無しさん
NGNG今のは、勝手に動くようになってるのか
思考停止してたわ。すまんね
0483デフォルトの名無しさん
NGNGそうとも限らないのか?
0484468
NGNGスティックを握ったら自動で中心の位置に来ると言っていたから、スティックを動かせるのでは
ないかと思ったまでです。
>>479 DirectInputが対応してるかどうかの問題
ということは、ハード的には動作可能ってことですね。
>>480
たしかに元から無い機能は制御できないですね。
>>481
貴重な情報ありがとうございます。希望が見えてきました。
0485デフォルトの名無しさん
NGNGキャラごとに固定的な動きをくねくねと。
0486デフォルトの名無しさん
NGNG例えばパワーステア
この場合はアシストだけれども
0487デフォルトの名無しさん
NGNGDirectXSDKにFFConstサンプルがあるけどこれはどういうもの?
それっぽいと思うんだけど……
コンスタントフォース(constant force)など調べてみたけどあんまり資料ないものなんだね
>>485じゃないけど一発ネタで使うぶんにはおもしろそうなのに
0488468
NGNGDirectXに関してはこれから勉強するという段階なので、???な状態です。すみません。
FFConstサンプル参考にしてみます。ありがとうございます。
0489469
NGNG0490動画直リン
NGNG0491デフォルトの名無しさん
NGNGE-MAILにsageと入力して書き込んで。
0492デフォルトの名無しさん
NGNG0493デフォルトの名無しさん
NGNG2ch初心者め。
0495デフォルトの名無しさん
NGNG頭が固いのではない、説明が悪すぎ
>>494
こら! 違うだろ
通ならこう汁!
0496デフォルトの名無しさん
NGNGこのスレのせいで興味でたんだけど滅茶苦茶高いじゃん、買えないよ
0498デフォルトの名無しさん
NGNGDirectx9のプログラムを組んだのですが
友達のパソコンでまったく起動しないのです。
なぜでしょうか?
初期化は本のそのままなので違ってるのは思えないし、
ランタイムは入れてもらったし。。
まったく思いつきません。
他に原因とかあるでしょうか?
0499デフォルトの名無しさん
NGNG動かないという友達の環境について、ほとんど説明が無いではないか。
まずは、友達の環境について細かく書くことだろうな。
0500sage
NGNGとりあえずデバイスマネージャでグラフィックカード
を見てもらったのですが
「S3 Graphics ProSavage + utilities」
といってます。
今度は父と母のパソコンで試したのですが
父のパソコンでできましたのですが
母のパソコンではできませんでした。
それで今度はじかにデバッグしてみたのですが
どうやらデバイスの設定を失敗してるようです。
0501デフォルトの名無しさん
NGNGそれと、「動かない」って言っているけど
エラーメッセージとかはなんも出ないのかい?
0502sage
NGNG原因は下のところだというのまでわかりましたが
hrの判定で失敗ならメッセージボックスを出してみたのですが
ことごとく失敗しているようです。
なぜでしょうか、、
UINT &Adapter;
D3DDEVTYPE &Device;
// アダプタの選択
Adapter = D3DADAPTER_DEFAULT;// プライマリ・ディスプレイ・アダプタ
// デバイス能力の取得
D3DCAPS9 Caps; // 能力を受け取るD3DCAPS9構造体
HRESULT hr;
Device = D3DDEVTYPE_HAL;// HALデバイスをチェック
hr = g_pD3D->GetDeviceCaps(Adapter, Device, &Caps);
DXTRACE_ERR_MSGBOX(NULL,hr);
if (FAILED(hr)){
MessageBox(hwndApp, (LPSTR)"221", "情報設定", MB_OK | MB_ICONWARNING);
}
if (FAILED(CheckDeviceCaps(&Caps)))
{
DXTRACE_ERR("SelectD3DDevice CheckDeviceCaps HAL", E_FAIL);
MessageBox(hwndApp, (LPSTR)"2211", "情報設定", MB_OK | MB_ICONWARNING);
Device = D3DDEVTYPE_REF;// REFデバイスをチェック
hr = g_pD3D->GetDeviceCaps(Adapter, Device, &Caps);
if (FAILED(hr) || FAILED(CheckDeviceCaps(&Caps))){
MessageBox(hwndApp, (LPSTR)"2212", "情報設定", MB_OK | MB_ICONWARNING);
return DXTRACE_ERR("SelectD3DDevice CheckDeviceCaps REF", E_FAIL);
}
}
0503デフォルトの名無しさん
NGNG2.グラフィックボードがもともと対応していない
3.何か他にDirectXを使用するソフトが動いている
0504sage
NGNG2なのでしょうか、でしたらもう駄目ってことですよね、、
0505動画直リン
NGNG0506デフォルトの名無しさん
NGNGこのデバイスは、照会されたテクニックをサポートしていない。
というエラーでした。
解決はしてませんが
ありがとうございました。
0507デフォルトの名無しさん
NGNG0508デフォルトの名無しさん
NGNGで返ってくる値は
D3DERR_INVALIDCALL メソッドの呼び出しが無効である。たとえば、メソッドのパラメータに無効な値が設定されている場合などである。
D3DERR_INVALIDDEVICE 要求されたデバイスの種類が無効である。
D3DERR_OUTOFVIDEOMEMORY Direct3D が処理を行うのに十分なディスプレイ メモリがない。
の3つとHELPには記述されているのですが
このような値が返ってくるのです。
0509デフォルトの名無しさん
NGNG変な奴が沢山粘着しそうだなぁ。
0510デフォルトの名無しさん
NGNGひたすら上がってるスレうざいよ。
0511デフォルトの名無しさん
NGNGもうキミの敗北は決定したからあきらめろ。
■ このスレッドは過去ログ倉庫に格納されています