MFC架构下的DirectX8
2010-05-25 20:36:05 来源:WEB开发网第四章 画索引三角形
(DX8MFC3)
上一章的画三角形方式运行效率是较低的,而实际上我们都会使用DrawIndexedPrimitive()而不是DrawPrimitive()。想一想,如果要画两个相连的三角形,共有四个顶点。用DrawIndexedPrimitive()画要画四个顶点,而用DrawPrimitive()画则要画六个顶点。
如果你可以顶点建立索引,你就可以用DrawIndexedPrimitive()画三角形了。我们可以为一个三角形建立这样的索引:
WORD indices[] = { 0, 1, 2 };
它表示三角形中,第一个顶点对应于顶点阵列的第0个顶点;三角形中,第二个顶点对应于顶点阵列的第1个顶点;三角形中,第三个顶点对应于顶点阵列的第2个顶点;
要画索引三角形,首先要建立索引缓冲:
num_elems = sizeof(indices) / sizeof(indices[0]);
pID3DDevice->CreateIndexBuffer(sizeof(WORD) * num_elems,
D3DUSAGE_WRITEONLY,
D3DFMT_INDEX16,
D3DPOOL_DEFAULT,
&pIndexBuffer);
第二步是用顶点填充这个索引缓冲:
WORD *pIndex;
pIndexBuffer->Lock(0, 0, (BYTE **)&pIndex, 0);
for(ii = 0; ii < num_elems; ii++)
{
pIndex[ii] = indices[ii];
}
pIndexBuffer->Unlock();
设定索引缓冲:
pID3DDevice->SetIndices(pIndexBuffer, 0);
把DrawScene()的相应的pID3DDevice->DrawPrimitive(...)换成:
pID3DDevice->DrawIndexedPrimitive(
D3DPT_TRIANGLELIST,
0,
sizeof(indices) / sizeof(indices[0]),
0,
sizeof(indices) / sizeof(indices[0]) / 3);
运行程序的到的还是一个三角形。
第五章 加入帖图
(DX8MFC4)
首先,在MYVERTEX结构中加入帖图坐标系tu和tv,并给顶点阵列赋以适当的值。
下一步,设置你的帖图:
D3DXCreateTextureFromFile(pID3DDevice,
"dx5_logo.bmp",
&pTexture);
pID3DDevice->SetTexture(0, pTexture);
其中的"dx5_logo.bmp"指的是帖图文件,你可以用其他的文件代替它,运行程序你会看到一个带帖图的三角形。
更多精彩
赞助商链接