c ++ - Prøve trækcylinder i directx gennem D3DXCreateCylinder

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg er meget nybegynder i directx og vil gerne vide mere, jeg prøvede koden fra directxtutorial.com Jeg ligger et eksempel på \ sample for D3DXCreateCylinder? Tak [3]

Bedste reference


Okay så,


D3DXCreateCylinder kan bruges som sådan


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

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


Så hvad foregår der?



  1. d3ddev skal være din enheds kontekst, som jeg antager, du har oprettet.

  2. Radien på Negativ Z.

  3. Radien på Positive Z.

  4. Formenes længde på Z-aksen.

  5. Antallet af polygoner (eller underopdelinger) omkring Z.

  6. Antallet af polygoner på Z-aksen.

  7. Pointerens adresse, der indeholder det oprettede net.



Tinker rundt med værdierne, eksperimentering kan ikke skade.

Andre referencer 1


Disse ressourcer hjælper med at supplere svaret:



  1. https://directxtutorial.com/Tutorial11/B-A/BA2.aspx

  2. http://msdn.microsoft.com/en-us/library/windows/desktop/ff476880 (v=vs.85) .aspx

  3. http://msdn.microsoft.com/en-us/library/windows/desktop/hh780339 (v=vs.85) .aspx


Andre referencer 2


Som standard genererer API D3DXCreateCylinder API ikke teksturkoordinaterne til kortlægning af en tekstur over det oprettede cylindriske net. [4] [5] [6]


Alternativt kan du formulere din egen cylindriske geometri som nedenfor for teksturkortlægning:


 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;

}