我已经知道这可能通过使用D3DXComputeNormals()方法,但我无法弄清楚如何正确使用它。这样做没有任何教程或课程。有人可以给我解释或提供有用的代码吗?
答案 0 :(得分:0)
你是什么意思,"正确"?你在寻找计算邻接的教程吗?如果没有,MSDN文档很好地说明here,为pAdjacency
参数传递NULL。
答案 1 :(得分:0)
DirectXMesh库可以生成您可以用于任何版本的Direct3D的法线。
std::unique_ptr<WaveFrontReader<uint16_t>> mesh( new WaveFrontReader<uint16_t>() );
if ( FAILED( mesh->Load( L"test.obj" ) ) )
// Error
if ( mesh->hasNormals )
// Skip next computation
size_t nFaces = mesh->indices.size() / 3;
size_t nVerts = mesh->vertices.size();
std::unique_ptr<XMFLOAT3[]> pos( new XMFLOAT3[ nVerts ] );
for( size_t j = 0; j < nVerts; ++j )
pos.get()[ j ] = mesh->vertices[ j ].position;
std::unique_ptr<XMFLOAT3[]> normals( new XMFLOAT3[ nVerts ] );
if ( FAILED( ComputeNormals( &mesh->indices.front(), nFaces,
pos.get(), nVerts, CNORM_DEFAULT, normals.get() ) ) )
// Error
库和源代码在CodePlex上,因此您可以随时进入它以查看它正在做什么,并且它可以替代已弃用的D3DX库。