DirectX 9在TRIANGLEFAN隐藏第一个三角形

时间:2013-01-07 15:55:04

标签: c++ directx

我的问题是:如何使用 D3DPT_TRIANGLEFAN绘制正确的金字塔(三角形四边形金字塔)?

我用作积分:

CUSTOMVERTEX vertices[] =
{
    {  0.0f, 3.0f, 0.0f, 0x00ff0000, },           //The top Vertex
    {  1.0f, 0.0f, -1.0f, 0xff00ff00, },          //(A) vertex
    {  1.0f, 0.0f, 1.0f,  0xff0000ff, },          //(B) vertex
    {  -1.0f, 0.0f, 1.0f, 0xffffff00, },          //(C) vertex
    {  -1.0f, 0.0f, -1.0f, 0xffff00ff, },         //(D) vertex
    {  1.0f, 0.0f, -1.0f, 0xff00ff00, },          //(A) vertex
};

其中CUSTOMVERTEX是:

struct CUSTOMVERTEX 
{
    float x, y, z;
    DWORD color;
};

我称之为:

g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, 0, 5);

金字塔正确绘制,但是有一个额外的三角形绘制到屏幕上,一个用顶部和第一个顶点构成(一个直角三角形,其中PI / 2角度位于pyramind底部,另一个点是<< 1.0f,0.0f,-1.0f>>(第一点(A))。

所以我想要的是隐藏那个三角形,我试着让设备从1到5画出,但这只能给我基础((A) - (B) - (C) - (D)平面),以及我也尝试过剔除D3DCULL_CW,当我旋转金字塔的时候,我可以看到额外的三角形,一半被另一个平面隐藏。

1 个答案:

答案 0 :(得分:3)

IDirect3DDevice9::DrawPrimitive()的最后一个参数是原始计数,在你的情况下应该是4?

如果你想要包含基础,你必须将金字塔渲染为三角形列表,而不是由风扇表示完整的金字塔。