• ベストアンサー

DirectX:描画されません・・・ヒント下さい・・・

VCでC++を使ってDirectXを使ったプログラムを書いてます。 そういう仕事しているわけではなく、素人です。 DirectXは色々とややこしくて、何がなんだかさっぱりです。 とりあえず、Win32APIを使って、ウィンドウを表示し、DirectXを使って、ボタンを押すことで、ウィンドウモードとフルスクリーンモードを切り替えることの出来るプログラムは作れました。 しかし、3Dのモデルが表示されません。 何が駄目なのかが、さっぱりです。 こういう場合、何に原因があることが多いのでしょうか?? DirectX経験者の方、どうか、教えてください。お願いします。 以下に現在の状況を列挙します。 足りなければ、ご指摘ください。 ソースは見せることはできるのですが、かなり、スパゲティーなので・・・・。 DirectX:November 2008 目標:Xファイルからじゃなく座標を自分で指定して立方体を描画したい 出来ていると思われること ・Win32APIを使ったウィンドウの作成 ・Direct3Dオブジェクトの作成Direct3DCreate9⇒  D3DDeviceオブジェクトのプレゼンテーションパラメータの設定 ・カメラとライトの設定 ・あと、DirectXのメソッドで背景色だけは変えられます。 経験者の方がた、よろしくお願いします!!

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.3

>DirectX:November 2008 同じNovember 2008でもDirectX9系と10系があります。 まずどちらを利用しているか書いた方が良いでしょう。 >しかし、3Dのモデルが表示されません。 上記の情報だけでは推測の域を出ませんが 例えば ・ポリゴンの向きが逆周りになっている ・カメラの視界内にそのオブジェクトが無い ・インデックスバッファを使っているならインデックスの順がおかしい 等が考えられます。 まずは複雑なオブジェクトではなく TRIANGLELISTで3角形が表示できるかどうかをチェックしてみてください。 DirectX9なら SampleにあるTutorialが参考になるでしょう。 例えば C:\Program Files\Microsoft DirectX SDK (November 2008)\Samples\C++\Direct3D\Tutorials\Tut03_Matrices にあるプログラムは三角形が回転する単純なものです。 DirectX10の場合でも C:\Program Files\Microsoft DirectX SDK (November 2008)\Samples\C++\Direct3D10\Tutorials以下に 同じようなサンプルプログラムがあります。 上記のサンプルプログラムをベースに自分のコードを少しずつマージ(融合)していくという手もあります。

Cross999
質問者

お礼

お返事遅くなって申し訳ありません。 丁寧な回答ありがとうございます。 >同じNovember 2008でもDirectX9系と10系があります。 >まずどちらを利用しているか書いた方が良いでしょう。 そうですよね。すっかり、抜けてました。 私はDirectX9系を使っています。 >DirectX9なら >SampleにあるTutorialが参考になるでしょう。 ・・・サンプルがあるのは知っていたのですが・・・、 C:\Program Files\Microsoft DirectX SDK (November 2008)\Samples\C++\Direct3D で止まってました・・・。 こんな、シンプルなサンプルがあったんですね。 とりあえず、いくつか読もうとしたサンプルはあるんですが、 サンプルのくせに、既に、すごくて・・・、フレームワークは良く分からないし・・・・。 いや、これは、本当に助かります。 とりあえず、読んでみます。 一応、三角形を表示できるようにはなりました。 問題はデバイス作成だとかではなく、頂点宣言の方法に問題があったようです。 ただ、 「柔軟な頂点フォーマットを(FVF)を使う方法」と 「頂点宣言オブジェクトを作る方法」のうち、前者でしか、描画できていません。 書けたから、問題は解決したと言えばしたのですが、私の読んでいる参考書には前者では、「DirectX9.0の機能の一部を使えない」とあるですが、具体的にどう違うのかには、全く、触れられていません。 もし、お時間があるのなら、 ・「両者の違い」 ・「どちらを使うべきか?」 について教えていただけないでしょうか? 参考サイトや書籍でも構いません。 sha-girlさんには、既に、十分な回答をいただいているので、 sha-girlさんさえ良ければ、別スレッドを立てさせて頂きます。 あと、時間の都合が合わない場合を考えて、 8/2までに返答が無かった時点で、こちらの点数を付与します。 ありがとうございました!!

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.4

>・「両者の違い」 「頂点宣言オブジェクトを作る方法」とはFVFよりも頂点を詳細に定義する方法の事ですね。 具体的にはDirectXの場合SetFVFの代わりに CreateVertexDeclaration→SetVertexDeclarationを呼んで頂点を定義するわけですが、 これは主にシェーダーを書く場合に必要になります。 例えば頂点カラー値をfloat値にしたりする事が出来ます。 >問題はデバイス作成だとかではなく、頂点宣言の方法に問題があったようです。 自分で頂点を定義したもの(勝手に並び替えたもの)はそのまま描画できません。 シェーダーを自分で定義する必要があります。 (私はシェーダーに詳しくないので、自信はありません。) >・「どちらを使うべきか?」 もし極めたいのなら「頂点宣言オブジェクトを作る方法」を使った方が良いでしょう。 趣味であれば後は好奇心の問題だと思います。 CreateVertexDeclarationで検索すると使っているソースを見つける事が出来ると思います。 http://www.t-pot.com/program/74_dmap/index.html

Cross999
質問者

お礼

二度目の返信ありがとうございます。 やっぱり、 「頂点宣言オブジェクトを作る方法」の方が詳細なことが出来るんですね。 「頂点宣言オブジェクトを作る方法」の方でがんばってみたいと思います。 今回は、本当にありがとうございました。

すると、全ての回答が全文表示されます。
  • hidebun
  • ベストアンサー率50% (92/181)
回答No.2

以下のサイトにはDirectX9の立方体の描画プログラムがあります。 ソースコードもあるので、自分のソースとの差分を探せば、 参考になるのではないでしょうか。 http://www.h2.dion.ne.jp/~takusoft/directx8/d3d/

Cross999
質問者

お礼

返事が遅くなって申し訳ありません。 DirectXに関する参考書やHPは、色々と探しましたが、 初めてみるサイトです。 とりあえず、見てみようと思います。 ありがとうございます。

すると、全ての回答が全文表示されます。
  • serina55
  • ベストアンサー率39% (37/93)
回答No.1

わかりません。

すると、全ての回答が全文表示されます。

関連するQ&A