使用d3ddevice绘制基本三角形时要注意事项

使用d3ddevice绘制基本三角形时要注意事项

  1. d3ddevice使用的是左手系坐标,所以culling mode也是左手系的
  2. 最终坐标是从屏幕(或窗口)左上角出发,x向右为正,y向下为正
  3. 最终顶点的z值必然在0~1之间,这是因为经过透视变换之后z的取值从[nz, fz]之间被拉伸(对应16位depth scentil为[0, MAX_USHORT]),并且以1/z的方式进行存储
  4. diffuse值上的alpha值选到屏幕时无效
  5. 如果顶点数据xyz之后有diffuse,那么顶点应该使用D3DFVF_XYZRHW即float[4]类型,这是因为position要求16位字节对齐

以下是一段必然能够绘制出三角形的代码,供参考:

struct { float x, y, z, w; DWORD color; } vertices[3] = { {250.0f, 250.0f, 0.5f, 1.0f, D3DCOLOR_ARGB(255, 255, 0, 0)}, {100.0f, 400.0f, 0.5f, 1.0f, D3DCOLOR_ARGB(255, 0, 255, 0)}, {400.0f, 400.0f, 0.5f, 1.0f, D3DCOLOR_ARGB(255, 0, 0, 255)}, }; V(pd3dDevice->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE)); V(pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE)); V(pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 1, vertices, sizeof(vertices[0])));  

关于D3DFVF中的重要说明:

  • D3DFVF_XYZ——表示原始未参与变换的顶点
  • D3DFVF_XYZRHW——表示已经变换过得顶点
  • D3DFVF_XYZW——含有clipper信息的顶点,只有在使用vertex shader时才会用到

你可能感兴趣的:(struct,存储,float,shader)