Storing mesh members using smart pointers
This commit is contained in:
@@ -100,9 +100,14 @@ namespace OpenVulkano::Scene
|
||||
mesh.mPrimitiveTypes = aiPrimitiveType_TRIANGLE;
|
||||
mesh.mNumUVComponents[0] = 2;
|
||||
|
||||
mesh.mVertices = new aiVector3D[geometry->vertexCount];
|
||||
mesh.mNormals = new aiVector3D[geometry->vertexCount];
|
||||
mesh.mTextureCoords[0] = new aiVector3D[geometry->vertexCount];
|
||||
std::unique_ptr<aiVector3D[]> vertices = std::make_unique<aiVector3D[]>(geometry->vertexCount);
|
||||
mesh.mVertices = vertices.get();
|
||||
|
||||
std::unique_ptr<aiVector3D[]> normals = std::make_unique<aiVector3D[]>(geometry->vertexCount);
|
||||
mesh.mNormals = normals.get();
|
||||
|
||||
std::unique_ptr<aiVector3D[]> texCoords = std::make_unique<aiVector3D[]>(geometry->vertexCount);
|
||||
mesh.mTextureCoords[0] = texCoords.get();
|
||||
|
||||
float scaling = 100; // fbx units are centimeters...
|
||||
for (uint32_t i = 0; i < geometry->vertexCount; ++i)
|
||||
@@ -114,22 +119,27 @@ namespace OpenVulkano::Scene
|
||||
}
|
||||
|
||||
mesh.mNumFaces = geometry->indexCount / 3;
|
||||
mesh.mFaces = new aiFace[mesh.mNumFaces];
|
||||
std::unique_ptr<aiFace[]> faces = std::make_unique<aiFace[]>(mesh.mNumFaces);
|
||||
mesh.mFaces = faces.get();
|
||||
|
||||
std::unique_ptr<unsigned int[]> indices = std::make_unique<unsigned int[]>(geometry->indexCount);
|
||||
size_t lastUsedIndex = 0;
|
||||
|
||||
for (uint32_t i = 0; i < mesh.mNumFaces; ++i)
|
||||
{
|
||||
aiFace& face = mesh.mFaces[i];
|
||||
face.mNumIndices = 3;
|
||||
face.mIndices = new unsigned int[face.mNumIndices];
|
||||
face.mIndices = &indices[lastUsedIndex];
|
||||
|
||||
face.mIndices[0] = geometry->GetIndex(i * 3 + 0);
|
||||
face.mIndices[1] = geometry->GetIndex(i * 3 + 1);
|
||||
face.mIndices[2] = geometry->GetIndex(i * 3 + 2);
|
||||
|
||||
lastUsedIndex += face.mNumIndices;
|
||||
}
|
||||
|
||||
aiMesh* meshes[1];
|
||||
aiMesh* meshes[1] = { &mesh };
|
||||
scene.mMeshes = meshes;
|
||||
scene.mMeshes[0] = &mesh;
|
||||
scene.mNumMeshes = 1;
|
||||
|
||||
unsigned int meshIndices[1];
|
||||
@@ -138,9 +148,8 @@ namespace OpenVulkano::Scene
|
||||
scene.mRootNode->mNumMeshes = 1;
|
||||
|
||||
aiMaterial material;
|
||||
aiMaterial* materials[1];
|
||||
aiMaterial* materials[1] = { &material };
|
||||
scene.mMaterials = materials;
|
||||
scene.mMaterials[0] = &material;
|
||||
scene.mNumMaterials = 1;
|
||||
|
||||
aiString externalPath(texturePath);
|
||||
@@ -149,8 +158,18 @@ namespace OpenVulkano::Scene
|
||||
Assimp::Exporter exporter;
|
||||
aiReturn result = exporter.Export(&scene, "fbx", fbxPath);
|
||||
|
||||
scene.mRootNode = nullptr;
|
||||
mesh.mVertices = nullptr;
|
||||
mesh.mNormals = nullptr;
|
||||
mesh.mTextureCoords[0] = nullptr;
|
||||
for (uint32_t i = 0; i < mesh.mNumFaces; ++i)
|
||||
{
|
||||
aiFace& face = mesh.mFaces[i];
|
||||
face.mIndices = nullptr;
|
||||
}
|
||||
mesh.mFaces = nullptr;
|
||||
|
||||
rootNode.mMeshes = nullptr;
|
||||
scene.mRootNode = nullptr;
|
||||
scene.mMeshes = nullptr;
|
||||
scene.mMaterials = nullptr;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user