dx9 创建球体 模拟地球
初学directx9 想做一个球体,模拟地球,但发现贴图有严重问题。
struct VERTEX
{
D3DXVECTOR3 pos ; // Vertex position
D3DXVECTOR3 norm ; // Vertex normal
float tu ; // Texture coordinate u
float tv ; // Texture coordinate v
} ;
ID3DXMesh* mesh;
D3DXCreateSphere(Device,1.0f, 40,40,&mesh,0);
ID3DXMesh* texMesh;
mesh->CloneMeshFVF(D3DXMESH_SYSTEMMEM, FVF_VERTEX, Device, &texMesh);
mesh->Release();
VERTEX* pVerts ;
texMesh->LockVertexBuffer(0, (void**)&pVerts);
int numVerts = texMesh->GetNumVertices() ;
for (int i =0; i < numVerts; i++)
{
if(pVerts->norm.z >= 0 && pVerts->norm.y >= 0)
pVerts->tu = asinf(pVerts->norm.z) / (2 * D3DX_PI);
else if(pVerts->norm.z >= 0 && pVerts->norm.y <= 0)
pVerts->tu = (180 - asinf(pVerts->norm.z)) / (2 * D3DX_PI);
else if(pVerts->norm.z <= 0 && pVerts->norm.y <= 0)
pVerts->tu = (180 - asinf(pVerts->norm.z)) / (2 * D3DX_PI);
else if(pVerts->norm.z <= 0 && pVerts->norm.y >= 0)
pVerts->tu = (360 + asinf(pVerts->norm.z)) / (2 * D3DX_PI);
pVerts->tv = asinf(pVerts->norm.x) / D3DX_PI + 0.5f ;
++pVerts ;
}
texMesh->UnlockVertexBuffer() ;