如何使用directX创建/绘制/渲染网格(平面)?

时间:2013-07-23 09:08:03

标签: grid directx directx-9 plane

我想绘制该图片的平面。enter image description here

现在我尝试顶点缓冲区,DrawPrimitive是D3DPT_LINESTRIP。但不是我想要的效果。

所以任何超过有效的方式???

请给我一些建议。谢谢。

3 个答案:

答案 0 :(得分:1)

我会给你介绍一本书Introduction to 3D programming with DirectX,它很棒 有关如何在第8章第4节中执行此操作的详细信息。

答案 1 :(得分:1)

这可能是一个选项,不是最佳选择,但会实现网格

void DrawGrid (float32 Size, CColor Color, int32 GridX, int32 GridZ)
{
  // Check if the size of the grid is null
        if( Size <= 0 )
                return;

  // Calculate the data
  DWORD grid_color_aux = Color.GetUint32Argb();
  float32 GridXStep = Size / GridX;
  float32 GridZStep = Size / GridZ;
  float32 halfSize = Size * 0.5f;

  // Set the attributes to the paint device
  m_pD3DDevice->SetTexture(0,NULL);
  m_pD3DDevice->SetFVF(CUSTOMVERTEX::getFlags());

  // Draw the lines of the X axis
  for( float32 i = -halfSize; i <= halfSize ; i+= GridXStep )
  {
    CUSTOMVERTEX v[] =
      { {i, 0.0f, -halfSize, grid_color_aux}, {i, 0.0f, halfSize, grid_color_aux} };

    m_pD3DDevice->DrawPrimitiveUP( D3DPT_LINELIST,1, v,sizeof(CUSTOMVERTEX));
  }

  // Draw the lines of the Z axis
  for( float32 i = -halfSize; i <= halfSize ; i+= GridZStep )
  {
    CUSTOMVERTEX v[] =
    { {-halfSize, 0.0f, i, grid_color_aux}, {halfSize, 0.0f, i, grid_color_aux} };

    m_pD3DDevice->DrawPrimitiveUP( D3DPT_LINELIST,1, v,sizeof(CUSTOMVERTEX));
  }
}

CUSTOMVERTEX结构:

struct CUSTOMVERTEX
{
        float32 x, y, z;
        DWORD color;
        static unsigned int getFlags()
        {
                return D3DFVF_CUSTOMVERTEX;
        }
};

注意:只有一个带有线条的网格,所以你需要绘制一个实体平面,以便得到你想要的结果。

答案 2 :(得分:0)

您可以将DrawPrimitiveD3DPT_TRIANGLESTRIP一起用于飞机。然后在D3DPT_LINELIST之后绘制带有深度偏差的索引线。这样,即使他们躺在飞机上,你也不会得到任何z战斗。