Как я могу создать/рисовать/рендерить сетку (плоскость) с помощью DirectX?

Я хочу нарисовать эту картинку в плоскости.введите здесь описание изображения

теперь я пробую буфер вершин, а DrawPrimitive - D3DPT_LINESTRIP. а не эффект я хочу.

так что это более чем эффективно???

Пожалуйста, дайте мне совет. Спасибо.


person user1658740    schedule 23.07.2013    source источник
comment
Что значит не эффект я хочу? Что вы на самом деле получили?   -  person Drew McGowen    schedule 23.07.2013


Ответы (3)


Я познакомлю вас с книгой Introduction to 3D programming with DirectX, в ней подробно описано, как это сделать, в главе 8, разделе 4.

person zionpi    schedule 07.05.2014

Это может быть вариантом, не оптимальным, но позволит достичь этой сетки.

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;
        }
};

Примечание. Это только сетка с линиями, поэтому вам нужно нарисовать сплошную плоскость, чтобы получить желаемый результат.

person Vazquinhos    schedule 03.12.2014

Вы можете использовать DrawPrimitive с D3DPT_TRIANGLESTRIP для самолета. Затем нарисуйте индексированные линии после с помощью D3DPT_LINELIST с смещением глубины. Таким образом, даже если они будут лежать на самолете, у вас не будет z-файтингов.

person Joseph Pla    schedule 23.07.2013