• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DirectXの2Dポリゴン描画について)

DirectXの2Dポリゴン描画について

WizTakaの回答

  • WizTaka
  • ベストアンサー率53% (7/13)
回答No.1

define 文についてですが, #define A B と書いた場合,「A を B に読み替えてもいいよ」ということです. なので,FVF_TLVERTEX と書いても (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1) として解釈されます. 逆に言うと,直接 (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1) と書いても問題ないということです. #define FVF_TLVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1) の部分は,どのような頂点データ構造体が定義されたかを表しています. 今の場合,「頂点は XYZ 座標・RHW値(2D変換用パラメータ)・頂点の色・テクスチャマッピング用座標 で表現されますよ」と定義している訳です. また,この define 文は頂点データ構造体の内容と一致していなければなりません. SetFVF関数は,レンダリングパイプラインに頂点データの構成がどんなものかを伝えるためのものです. なので,上の FVF_TLVERTEX を引数としてセットします.

supertrap
質問者

お礼

有難う御座います。 #define NUM 3 等は見たことがあったのですが、 ”(” カッコ と”|” が付いていたので、FVF_TLVERTEXは関数で、引数をORで取るのかなどと色々考えてしまいました。 有難う御座いました。 

関連するQ&A

  • テクスチャがうまく表示されない[DirectX]

    こんにちわ。初歩的な質問かもしれませんが、よろしくお願いします。 テクスチャは読み込まれてはいるのですが、(色だけは表示される。違う画像にすると色が変わる)どうも模様が表示されず、画像どおりになりません。 とりあえず関係ありそうなコードだけ。。 -----頂点定義-------- struct CUSTOMVERTEX {FLOAT X,Y,Z; D3DVECTOR NORMAL; FLOAT U,V;}; #define CUSTOMFVF (D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1) ----頂点------ struct CUSTOMVERTEX t_vert[]={ {0.0f, 0.0f,0.0f,0,1,0, 0.0f, 0.0f,}, {-30.0f,0.0f,0.0f,0,1,0, 1.0f, 0.0f,}, {0.0f, 0.0f,30.0f,0,1,0, 0.0f, 1.0f,}, {-30.0f,0.0f,30.0f,0,1,0, 1.0f, 1.0f,}, }; -------描画処理------ d3ddev->SetStreamSource(0, t_buffer, 0, sizeof(CUSTOMVERTEX)); d3ddev->SetTexture( 0 , texture ); d3ddev->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2); ------------------------------------------------------------- テクスチャのサイズは512x512px、ライトはD3DRS_LIGHTNINGでTRUEにしてもFALSEにしても変化なし。 環境は以下のとおりです。 OS: WindowsXP コンパイラ:VisualStudio2005 DirectX9.0

  • DirectXのD3DXVECTOR3

    directxでのCDに書いてあるこのソースの一部の事で質問します。 D3DXVECTOR3 mVecDir; mVecDir = D3DXVECTOR3( -0.5f, -0.5f, 1.0f); --------------------------------------------------------------- D3DXVECTOR3をDirectX SDK October 2004で調べたのですが、 typedef struct D3DXVECTOR3 : public D3DVECTOR { public: D3DXVECTOR3() {}; D3DXVECTOR3( CONST FLOAT * ); D3DXVECTOR3( CONST D3DVECTOR& ); D3DXVECTOR3( CONST D3DXFLOAT16 * ); D3DXVECTOR3( FLOAT x, FLOAT y, FLOAT z ); // 型変換 operator FLOAT* (); operator CONST FLOAT* () const; // 代入演算子 D3DXVECTOR3& operator += ( CONST D3DXVECTOR3& ); D3DXVECTOR3& operator -= ( CONST D3DXVECTOR3& ); D3DXVECTOR3& operator *= ( FLOAT ); D3DXVECTOR3& operator /= ( FLOAT ); // 単項演算子 D3DXVECTOR3 operator + () const; D3DXVECTOR3 operator - () const; // 2 項演算子 D3DXVECTOR3 operator + ( CONST D3DXVECTOR3& ) const; D3DXVECTOR3 operator - ( CONST D3DXVECTOR3& ) const; D3DXVECTOR3 operator * ( FLOAT ) const; D3DXVECTOR3 operator / ( FLOAT ) const; friend D3DXVECTOR3 operator * ( FLOAT, CONST struct D3DXVECTOR3& ); BOOL operator == ( CONST D3DXVECTOR3& ) const; BOOL operator != ( CONST D3DXVECTOR3& ) const; } D3DXVECTOR3, *LPD3DXVECTOR3; これを自分が見た限り、戻り値がないと思います。 何故、mVecDir = D3DXVECTOR3( -0.5f, -0.5f, 1.0f);のD3DXVECTOR3は戻り値があるのでしょうか? ちなみに、質問のソース2行はD3DXVECTOR3 mVecDir( -0.5f, -0.5f, 1.0f);でもOKですよね? よろしくお願いします。

  • Melによるポリゴンサーフェイスの選択

    melによってポリゴンのサーフェイスの1つを選択し,削除したいのですが, 削除する以前に選択する部分でうまくいきません. 参考のために,市販の「Mel教科書」という本に載っていた ランダムな大きさに生成したポリゴンの頂点を選択するという方法も試してみたのですが動きません. コードは以下のものです. float $val = rand(0.5, 2.0); string $poly[] = 'polySphere -r $val'; string $ver[] = 'polyListComponentConversion -toVertex poly[0]'; string $verE[] = 'filterExpand -selectionMask 31 $ver'; 私はMaya5を使用していまして,本にはMaya5での動作確認を取っていると書かれていたので動きはずだと思うのですが… 何故本のプログラムがうまく動かないのか,またサーフェイスを削除するmelがわかる方,いらっしゃいましたら教えてください.

  • DirectX シェーダプログラムについて

    今、個人的にゲームを製作するため「DirectX シェーダプログラミング 仕組みからわかるゲームエフェクトテクニック」という本を用いて勉強しています。ここでサンプルプログラムをデバックしてみると 「0x013c230b でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。」 という警告がでて失敗します。ここでの問題はプログラムが // シェーダプログラムへテクニックへのハンドルの取得 m_hTech = m_pFX->GetTechniqueByName("BasicTech"); // シェーダープログラムのグローバル変数のハンドルの取得 m_hWvp = m_pFX->GetParameterByName(0, "g_wvp"); m_hColor = m_pFX->GetParameterByName(0, "g_color"); 上記にさしかかると警告がでてきます。どうやら「m_hTech]、「m_hWvp」、「m_hColor」が問題あるようです。ここでこれを宣言しているヘッダーファイルを下記に表記します。 void Destroy(); private: D3DXMATRIX m_proj; // プロジェクション行列 D3DXMATRIX m_view; // ビューイング行列 // 頂点データ構造体 struct MY_VERTEX_POS{ D3DXVECTOR3 p; // 位置 }; // 頂点デクラレーション LPDIRECT3DVERTEXDECLARATION9 m_pVertexDecl; // 頂点バッファへのポインタ LPDIRECT3DVERTEXBUFFER9 m_pVB_POS; // エフェクト LPD3DXEFFECT m_pFX; // テクニックへのハンドル D3DXHANDLE m_hTech; // シェーダプログラムのグローバル変数へのハンドル D3DXHANDLE     m_hWvp; D3DXHANDLE        m_hColor; }; #endif // _Scene_h_ ここで、なぜハンドルが取得できないのか教えていただけると幸いです。 よろしくおねがいします。

  • DirectX ~テクスチャに値を書き込む~

    m_pDevice->CreateTexture( 128, 128, 1, 0, D3DFMT_A32B32G32R32F, D3DPOOL_MANAGED, &pTex, NULL ); で生成したテクスチャに浮動小数点の値を 自分で書き込みたいのですが、うまくいきません。 テクスチャのサーフェスをロックしたあと、操作できるようですが・・ ソースコードを記述します。 D3DLOCKED_RECT rect; LPDWORD data; float a = 0.0; float r = 0.56; float g = 0.24; float b = 1.0; /* テクスチャのサーフェスをロック */ surface->LockRect(&rect, NULL, 0); for(int y=128-1; y>=0; y--){ /* 書き込む行の先頭アドレスに移動する */ data = (LPDWORD)((LPBYTE)rect.pBits + rect.Pitch * y); for( int x=0; x<128; x++){ /* カラーデータを書き込む */ *data = ((DWORD)a << 96) | ((DWORD)b << 64) | ((DWORD)g << 32) | ((DWORD)r );     data++; } } スペースで余白を空けることができなくて、少々見にくくなってしまいました。 1つの色につき32bitななので、32bitづつシフトしています。 また、float型は4バイト(32bit)なので間違ってはいないと思うのですが・・。 何かアドバイスできる方はお願い致します。

  • BASICで3Dポリゴンの描画

    BASICで3Dポリゴンの描画を行おうとしているのですが、 Zソート法で順番に奥からポリゴンを描画しようとすると、 後から描画したポリゴンが他のポリゴンと重なっている場合、 PAINTで塗りつぶしがうまくいきません。 具体的には、上の図のように描画したいのに、 下の図のように描画されてしまうことです。 なにかいい解決法はあるのでしょうか。 回答をお願いします。

  • 四角ポリゴンで3Dの家具などを描画したいのですが?

     3D描画のことには初心者なのですが、四角ポリゴンで3Dの家具などDXFファイルで出力できる描画しやすいソフトはありますでしょうか?  教えていただけますと幸いに存じます。安価であれば安価であるほど助かります。

  • C言語 #defineについて

    C言語でどの様に考えれば良いか分からない事があるので、教えて下さい。 以下の様な行が出てきたのですが、どういう意味なのでしょうか? #define SYSTEM (*(volatile struct st_system *)0x80000) 現状分かっている事は 1.#define ABC 100   ならこれ以降で出てくるABCは100と読み替える。 2.volatileはコンパイラの最適化を抑制する様な意味。 とい事です。 以上、宜しくお願い致します。

  • libecc

    楕円曲線暗号のソースコードをダウンロードしました。 libecc の中のファイルに #define LibEccDebug(STATEMENT...) LibcwDebug(libecc::debug::channels, STATEMENT) との記述があります。 たぶん、gccをつかえば コンパイルできると思うのですが、 CV++2005でコンパイルしたいのです。 ...が問題なので #define LibEccDebug(STATEMENT) LibcwDebug(libecc::debug::channels, STATEMENT) と変えてしまって差し支えないでしょうか? また、 #define LibEccDebug(STATEMENT...) の...は、 他にも引数があるよ という意味に理解してかまわないのでしょうか? よろしくお願いします。

  • リアルタイムで多数の3角形ポリゴン(2D)を描画したい

    リアルタイムでテクスチャを貼った多数の3角形ポリゴン(2D)をアルファブレンドを加味して描画したいのですが、OpenGL,DirectX等は使わずに自前のコードで実装したいのです。参考になるアルゴリズムを紹介したサイト、ソースコードなどを掲載しているサイトなどありましたら教えてください。検索のヒントになるワードでも結構です。お願いします。