>m_pDevice->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1);
これは、描画する頂点の情報を設定しています。
D3DFVF_XYZRHWは座標を持ち、頂点でデータを定義する構造体に
float x, y, z, rhw;
を入れる必要があります。
D3DFVF_DIFFUSEはディフューズ色成分を持ち、頂点でデータを定義する構造体に
DWORD color
を入れる必要があります。
D3DFVF_TEX1はテクスチャ座標を持ち、頂点でデータを定義する構造体に
float tu, tv
を入れる必要があります。
>const float tu = (float)m_Info.Width / m_Desc.Width;
>const float tv = (float)m_Info.Height / m_Desc.Height;
テクスチャの座標は0.0f~1.0fで扱います。
今回のテクスチャのサイズは1024x1024であり、表示した領域は800x600なので
上記の計算式で、表示するための座標を出しています。
struct VERTEX2D
{
float x, y, z, rhw;
DWORD color;
float tu, tv;
} v[4];
これはm_pDevice->SetFVFで設定した内容に基づいた構造体を定義しています。
その後の代入式をバラスと
// 左上の頂点
v[0].x = 0.0f; // X座標
v[0].y = 0.0f; // Y座標
v[0].z = 0.0f; // Z座標
v[0].rhw = 1.0f; // 説明が難しいので割愛
v[0].color = D3DCOLOR_XRGB(255, 255, 255); // 色
v[0].tu = 0.0f; // テクスチャのX座標
v[0].tv = 0.0f; // テクスチャのY座標
// 右上の頂点
v[1].x = (float)m_Info.Width; // X座標
v[1].y = 0.0f; // Y座標
v[1].z = 0.0f; // Z座標
v[1].rhw = 1.0f; // 説明が難しいので割愛
v[1].color = D3DCOLOR_XRGB(255, 255, 255); // 色
v[1].tu = tu; // テクスチャのX座標
v[1].tv = 0.0f; // テクスチャのY座標
// 左下の頂点
v[2].x = 0.0f; // X座標
v[2].y = (float)m_Info.Height; // Y座標
v[2].z = 0.0f; // Z座標
v[2].rhw = 1.0f; // 説明が難しいので割愛
v[2].color = D3DCOLOR_XRGB(255, 255, 255); // 色
v[2].tu = 0.0f; // テクスチャのX座標
v[2].tv = tv; // テクスチャのY座標
// 右下の頂点
v[3].x = (float)m_Info.Width; // X座標
v[3].y = (float)m_Info.Height; // Y座標
v[3].z = 0.0f; // Z座標
v[3].rhw = 1.0f; // 説明が難しいので割愛
v[3].color = D3DCOLOR_XRGB(255, 255, 255); // 色
v[3].tu = tu; // テクスチャのX座標
v[3].tv = tv; // テクスチャのY座標
ここまで書いて気づいたのですが、アップしたソースのrhwが0.0fになっていました。
1.0fが正しい数値ですので、直して置いてください。表示されない原因はこっちかもしれません。(私のほうは、なぜか表示されましたが(汗))
>hr = m_pDevice->SetTexture(0, m_pTexture);
>hr = m_pDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, v, sizeof(VERTEX2D));
最後にデバイスにテクスチャーをセットして、三角ストリップ形式で描画をしています。