Попытка нарисовать цилиндр в DirectX через D3DXCreateCylinder - PullRequest
0 голосов
/ 15 марта 2012

Я очень новичок в DirectX и хочу узнать больше, я пробовал код с directxtutorial.com У меня есть пример \ образец для D3DXCreateCylinder?Спасибо

Ответы [ 3 ]

1 голос
/ 22 марта 2012

Хорошо,

D3DXCreateCylinder можно использовать как таковой

LPD3DXMESH cylinder; // Define a pointer to the mesh.

D3DXCreateCylinder(d3ddev, 2.0f, 0.0f, 10.0f, 10, 10, &cylinder, NULL);

Так что же происходит?

  1. d3ddev должен быть контекстом вашего устройства, чтобыбудет предполагать, что вы создали.
  2. Радиус на отрицательном Z.
  3. Радиус на положительном Z.
  4. Длина фигуры на оси Z.
  5. Количество полигонов (или подразделений) вокруг Z.
  6. Количество полигонов на оси Z.
  7. Адрес указателя, который содержит созданную сетку.

Повозитесь со значениями, экспериментировать не повредит.

0 голосов
/ 02 мая 2014

По умолчанию D3DXCreateCylinder API не генерирует координаты текстуры для отображения текстуры над созданной цилиндрической сеткой.

В качестве альтернативы вы можете сформулировать свою собственную цилиндрическую геометрию, как показано ниже для наложения текстуры:

 for( DWORD i = 0; i < Sides; i++ )
{
    FLOAT theta = ( 2 * D3DX_PI * i ) / ( Sides - 1 );

    pVertices[2 * i + 0].position = D3DXVECTOR3(radius*sinf( theta ), -height, radius*cosf( theta ) );
    pVertices[2 * i + 0].color = 0xffffffff;
    pVertices[2 * i + 0].tu = ( ( FLOAT )i ) / ( Sides - 1 );
    pVertices[2 * i + 0].tv = 1.0f;


    pVertices[2 * i + 1].position = D3DXVECTOR3( radius*sinf( theta ), height, radius*cosf( theta ) );
    pVertices[2 * i + 1].color = 0xff808080;
    pVertices[2 * i + 1].tu = ( ( FLOAT )i ) / ( Sides - 1 );
    pVertices[2 * i + 1].tv = 0.0f;

} 
0 голосов
/ 26 марта 2012
...