【C++】 DirectX初心者質問スレ Part21 【C】

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2009/02/26(木) 09:41:27
VRML
953デフォルトの名無しさん:2009/02/26(木) 17:20:43
どこかに横スクロールアクション(洞窟物語みたいな)のソースとかないでしょうか?
954デフォルトの名無しさん:2009/02/26(木) 18:03:09
>>924
こんなことを言う奴が増えたおかげで、クソゲーが急増した。
ばか雑誌がグラフィックばかり追いかけた結果だ。
955デフォルトの名無しさん:2009/02/26(木) 18:09:09
Xファイルのアニメーションについて質問です

歩行や武器を振るアニメーションを実装する場合は
1つのXファイルにモーションをまとめて再生するの動作ごとに別のXファイルを再生するのは
どちらが一般的ですか
956デフォルトの名無しさん:2009/02/26(木) 19:00:49
普通に考えてメッシュは一つ、アニメーションが複数
957デフォルトの名無しさん:2009/02/26(木) 19:02:17
横スクロールのシューティングだって大して変わらないじゃないの
とすると縦横のスクロールなんてたいしてかわらないってことで
ゲームと一切関係ない背景のスクロールがそんなに重要か?って話になって
結局インベーダに落ち着いた感動ストーリー
958955:2009/02/26(木) 21:08:05
ということは
1つのXファイルの中に複数のアニメーションを入れて
使いたいフレームを呼び出すということですか

ありがとうございました
959デフォルトの名無しさん:2009/02/26(木) 22:10:09
質問させてください。
開発環境は「Visual C++ 2005 Express Edition」です。
http://msdn.microsoft.com/ja-jp/academic/cc998628.aspx よりサンプルソースをダウンロードし、
DirectXのSDKはhttp://msdn.microsoft.com/ja-jp/directx/aa937788.aspx の 「DirectX SDK (November 2008) 公開中 (英語)」をインストールしました。

ビルドしたんですが catch(void) の部分、Microsoft.DirectX.dll が見つからない、ともう一つのエラーが出ました。
上記2点は解決したんですが最後のひとつの

error C2664: 'Microsoft::DirectX::Direct3D::Device::Device(int,Microsoft::DirectX::Direct3D::DeviceType,
         System::IntPtr,Microsoft::DirectX::Direct3D::CreateFlags,Microsoft::DirectX::Direct3D::PresentParameters __gc * __gc[])' :
3 番目の引数を 'CApp __gc *const ' から 'System::IntPtr' に変換できません。(新しい機能 ; ヘルプを参照)
コンストラクタはソース型を持てません、またはコンストラクタのオーバーロードの解決があいまいです。
の解決方法が分かりません。

コードの抜粋です。
m_pDevice = new Direct3D::Device(0,Direct3D::DeviceType::Hardware,
                      this,
                      Direct3D::CreateFlags::SoftwareVertexProcessing,
                      pd3dpp); // Direct3DDeviceオブジェクトを生成

引数のthisの型は __gc class CApp : public System::Windows::Forms::Form です。

ご教示よろしくお願いします。
960デフォルトの名無しさん:2009/02/26(木) 23:33:59
Direct3D::PresentParameters* pd3dpps __gc[]= { pd3dpp };
m_pDevice = new Direct3D::Device(0,Direct3D::DeviceType::Hardware,
 this->Handle,
 Direct3D::CreateFlags::SoftwareVertexProcessing,
 pd3dpps); ってすれば通るけど、
Managed C++ は窓から投げ捨てた方がいいな。
961959:2009/02/27(金) 00:14:09
>>960
ありがとうございます。
該当部分のエラーは切り抜けたんですが今度は’winmm.lib’が見つからない言われました。
デフォルトではインストールされてないみたいです。
こっちのほうはもう少し調べてみますが。

>Managed C++ は窓から投げ捨てた方が
Managed C++という単語を調べたんですが
意味的には「Visual C++ 2005 Express Edition」は捨てたほうがいいということですかね?

DirectXは何も分からないので勉強にはいいかな?と思ったんですが・・・
962デフォルトの名無しさん:2009/02/27(金) 01:07:01
963デフォルトの名無しさん:2009/02/27(金) 01:29:57
ちんこ起つのかな??
964デフォルトの名無しさん:2009/02/27(金) 14:20:17
>>961
Windows SDKいれてないだろ?

今すぐVC++ 2005EEをアンインストールして2008入れ直せ
965デフォルトの名無しさん:2009/02/27(金) 16:53:09
3つの頂点から三角ポリゴンを書きましたが、これどっちが表なんですか?
法線とかいうのは表に向かう線ですよね?どこで表裏の設定するんですか?
966デフォルトの名無しさん:2009/02/27(金) 16:55:30
カメラから見て点が時計回りになるなら表。そうでないなら裏として描画される。
裏なら描画されない。

ただ、設定によっては逆回りを表とすることもできるが、あまり一般的ではないな。
両方表とすることもできる。こちらは時々使うかな。
967デフォルトの名無しさん:2009/02/27(金) 17:12:03
なるほどそういう決まりがあったんですね。
モデリングソフトの吐き出し方を調べてみますありがとう
968デフォルトの名無しさん:2009/02/27(金) 17:19:26
glは反時計回りが標準だからソフト次第だな
969デフォルトの名無しさん:2009/02/27(金) 17:23:24
シェーダの本を一通り読んだんですがほとんど理解できません
これは光と影の色の計算が膨大なためGPUにやらせるというのはわかりましたが
1点1点をfxの入力に渡してその点の色を計算させた後そのまま描画させるのが流れなんですか?
行列変換の命令とかあるんですが、データ丸ごと渡してアクションの動きの処理も全部GPUにやらせることができるんですか?
970デフォルトの名無しさん:2009/02/27(金) 18:31:55
DirectInputでゲームパッドを使えるようにしようと思ってサンプルを参考に打ってたんだが、
static LPDIRECTINPUTDEVICE8 g_lpDIJoypad = NULL;で定義して使ってみようとしたら
((*(IUnknown*)(&*pDInput))).__vfptr  CXX0017: エラーです: シンボル "pDInput" が見つかりません
と出たんだ。
一日原因調べたがさっぱりわからない、誰か助言してもらえないだろうか?;
開発環境はVS2005、DirectX SDK (November 2008) を使用してる。
971デフォルトの名無しさん:2009/02/27(金) 18:37:51
頂点シェーダが頂点単位でやる処理で
ピクセルシェーダがポリゴンの面を塗る処理だ
よし理解はバッチリだな
972デフォルトの名無しさん:2009/02/27(金) 18:54:11
>>970
動くサンプルを参考にしろよ
サンプルを参考に組んでる段階で動かないものをうごくようにするのは
経験者でもキツいときある
973デフォルトの名無しさん:2009/02/27(金) 20:01:16
DirectXのサンプルは、元ソースからビルドして動かなくても、
サンプルのexeファイルが動けば問題ないんでしょうか?
974デフォルトの名無しさん:2009/02/27(金) 20:05:13
ビルドして動いたほうがいいだろ
975959:2009/02/27(金) 20:06:12
>>964
ありがとうございます。
2005を削除して新しく「Microsoft Visual C++ 2008 Express Edition」を入れました。
>>960さんのコード変更をしてリビルドしたら通りました。(いくつか警告は出ましたが。。。)

>>960さん、>>964さん、ありがとうございました。
976デフォルトの名無しさん:2009/02/27(金) 20:23:52
>>971
ぜんぜんわかりません
移動とか全部GPUでやれるってことですか?
つかめないんですが、移動したあとの計算結果の値をまたC++に戻して相互に処理できるんですか?
977デフォルトの名無しさん:2009/02/27(金) 20:29:57
DirectXの本とか読めば描画の流れくらい書いてるだろ
まあテクスチャに出力させたりして無理やり値を得ることもできる
978デフォルトの名無しさん:2009/02/27(金) 20:39:27
>>976
移動とかじゃなくて
3D空間にあるものを2Dのスクリーンに表示するには
ビデオカメラで撮影するみたいに単に撮ればいいってわけじゃなくて
頂点の位置が2Dにしたときにどの位置に見えるかってのをいちいち計算しないといけない
計算方法自体はすでに確立されていて難しいことはないんだけど
その計算を頂点シェーダーにやらせてしまおうって話
979デフォルトの名無しさん:2009/02/27(金) 20:45:15
>>976
おいおい
だから落ち着いて考えろよ

@ローカル→Aワールド→Bカメラ→C射影→Dビューポート→Eシェーダ

で頂点と面の塗り処理はEだ
物体の移動は@とかAだろ
Eの処理をシェーダでやるんだ
移動といっても頂点の移動ならできる
ちなみに@〜Dがプログラム側(C++側?)の処理だ
計算結果をC++にもってくるのはできないだろ多分
できるような話もきいたことあるような気がするがとりあえずできないと思ってて
いーんじゃねぇの?
980デフォルトの名無しさん:2009/02/27(金) 20:47:39
計算結果持って期待ならシェーダーでとっておくしかないんじゃね
981デフォルトの名無しさん:2009/02/27(金) 20:55:25
移動ってエフェクトとかアニメーション変化するようなものに使うんですか?
相互やり取りできないとそれぐらいしかないですよね。しかも最初の状態に戻さないとどうなってるかもわからないんじゃGPUでの移動の状態で
C++側でプログラム分岐もできないですよね
GPUで処理させたデータ持ってこれるのかと思って変数登録、初期化した後は全部GPUでやるのかと思ってました
982デフォルトの名無しさん:2009/02/27(金) 20:57:57
979に突っ込みたいが、その前にそろそろ次スレの心配をしようぜ。
983デフォルトの名無しさん:2009/02/27(金) 21:00:43
よし、じゃあたててくる
ここって再利用だったんだな
984デフォルトの名無しさん:2009/02/27(金) 21:04:00
985デフォルトの名無しさん:2009/02/27(金) 21:04:38
>>981
>移動ってエフェクトとかアニメーション変化するようなものに使うんですか?
頂点の移動だよ
物体(メッシュ)の移動じゃないよ
スキニングとか
986デフォルトの名無しさん:2009/02/27(金) 21:15:48
thxだいぶ見えてきました
つまりオブジェクトの移動はどうあがいてもCPUなのでソフト処理で勉強しても損はないんですね
いや、本にハードが対応していない場合ソフトで処理することになると書いてあったので最初からハードでいいじゃんとおもったんです
まず行列から勉強します。かげとか、反射が必要になってからシェーダですね
987デフォルトの名無しさん:2009/02/27(金) 21:23:31
>>986
ばっかじゃね
そんな糞みたいな心配するよりさっさと組んでみろといいたい
こいつ触れてもいねぇのに無意味な質問しててすげーアホだな
興味ないならやめちゃえよ
988デフォルトの名無しさん:2009/02/28(土) 18:16:52
989デフォルトの名無しさん:2009/02/28(土) 21:26:03
ウメ
990デフォルトの名無しさん:2009/02/28(土) 21:35:13
Direct3DでGDIのPolygonをやる場合いい方法ありますか?
塗りつぶし方としてはWIDING指定の物と同じので構わないんですが、普通にスキャンラインごと
に左端右端を出していって、LINELISTとして描画以外に速い方法があると助かるんですが
991デフォルトの名無しさん:2009/02/28(土) 21:36:51
DIBに出力したのをそのまま使えば?
992デフォルトの名無しさん:2009/02/28(土) 21:50:34
ちょっとどう利点があるのか分からないんですが・・・あまり、詳しくないんで処理の簡単な説明お願いします。
993デフォルトの名無しさん:2009/02/28(土) 22:49:19
>>990
多角形を三角形に分割すればいい。
まず交差している辺があれば、交点で分割する。
180度以下の角に隣接する2つの頂点に線を引いてみて、多角形を構成する
他の辺と交差していなければ、そこを三角形として分割する。
これを頂点が3つになるまで繰り返すだけ。
994990:2009/03/01(日) 00:42:26
うー・・・ダメだ。いい方法が見つからない。どこかにGDIのPolygonの実装落ちてないですか?
毎フレームたくさん多角形を描くので軽い物じゃないとダメなんですが・・・
995デフォルトの名無しさん:2009/03/01(日) 00:46:34
三角形分割は十分軽い処理だが。
996デフォルトの名無しさん:2009/03/01(日) 12:32:01
そもそもDirectXの描画を理解してない悪寒
997デフォルトの名無しさん:2009/03/01(日) 13:04:26
>>995うーん、やってみます。描画以外の処理が重いので、できるだけ軽い方がいいのですが・・・
>>996流石にそれは無い。
998デフォルトの名無しさん:2009/03/01(日) 16:30:06
うめ
999デフォルトの名無しさん:2009/03/01(日) 16:42:25
1000
1000デフォルトの名無しさん:2009/03/01(日) 16:42:58
1000000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。