>>709
テクスチャ側のuv座標は0〜1なので、
例えば、256*256のビットマップで左上128*128の領域は(0.0,0.0)-(0.5,0.5)だ。
その領域をスクリーンの(100,200)-(228,328)に貼り付けたいのなら、

struct TLVertex {
  float x, y, z, w;
  float u, v;
};

TLVertex vl[4] = {
  { 100-0.5f, 200-0.5f, 0.0f, 1.0f, 0.0f, 0.0f },  // 左上
  { 100-0.5f, 328-0.5f, 0.0f, 1.0f, 0.0f, 0.5f }, // 左下
  { 228-0.5f, 328-0.5f, 0.0f, 1.0f, 0.5f, 0.5f }, // 右下
  { 228-0.5f, 200-0.5f, 0.0f, 1.0f, 0.5f, 0.0f }, // 右上
};

device->SetTexture( 0, hage );
device->SetFVF( D3DFVF_XYZRHW | D3DFVF_TEX0 );
device->DrawPrimitiveUP( D3DPT_TRIANGLEFAN, 2, vl, sizeof(TLVertex) );


あーもうここまで親切に書いたんだから理解して頂戴。

何故0.5fを引くかは深くは考えるな。
正確にはピクセルサイズが(1.0f,1.0f)なので、
ピクセルの角を合わせるために0.5fずらしてある。