2012-03-14 75 views
0

我是directx的新手,想知道更多,我试图从directxtutorial.com的代码我存在D3DXCreateCylinder的任何示例\ sample?由于在DirectX中试图通过D3DXCreateCylinder绘制圆柱体

+1

这将真正帮助,如果你减少代码张贴到*最小的可重复的例子*量 - 因为它是现在,有* waaaay *太多,以避免通过。 – tmpearce 2012-03-15 04:16:11

+0

你读过这篇文章:http://msdn.microsoft.com/en-us/library/windows/desktop/bb172762%28v=vs.85%29.aspx只要你理解3D坐标,功能不应该太硬。参数也应该是自解释的。 – Aleks 2012-03-20 16:04:21

回答

1

好吧,

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

默认情况下,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; 

}