SpiecsEngine
 
Loading...
Searching...
No Matches

◆ PackPrimVerticesFromSparseInputs()

bool Spices::MeshProcessor::PackPrimVerticesFromSparseInputs ( MeshPack * meshPack,
const std::vector< glm::uvec3 > primVertices,
std::vector< glm::vec3 > & packPoints,
std::vector< glm::uvec3 > & packPrimPoints,
std::unordered_map< uint32_t, uint32_t > & primVerticesMapReverse )
staticprivate

Pack PrimVertices from Sparse PrimVertices Inputs.

Parameters
[in]meshPackMeshPack.
[in]primVertices.
[in,out]packPoints.
[in,out]packPrimPoints

param [in,out] primVerticesMapReverse .

Returns
Returns true if succeed.

Merge Vertex.

Flatten Vertex Position.

Merge Vertex.

Flatten Vertex Position.

Definition at line 935 of file MeshProcessor.cpp.

942 {
944
948 std::unordered_map<uint32_t, uint32_t> primVerticesMap; // old: primVertexIndex , new: primPointIndex
949 for (auto& primVertex : primVertices)
950 {
951 if (primVerticesMap.find(primVertex.x) == primVerticesMap.end()) primVerticesMap[primVertex.x] = primVerticesMap.size();
952 if (primVerticesMap.find(primVertex.y) == primVerticesMap.end()) primVerticesMap[primVertex.y] = primVerticesMap.size();
953 if (primVerticesMap.find(primVertex.z) == primVerticesMap.end()) primVerticesMap[primVertex.z] = primVerticesMap.size();
954 }
955
959 packPoints.resize(primVerticesMap.size());
960 auto& vertices = *meshPack->m_MeshResource.vertices.attributes;
961 for (auto& pair : primVerticesMap)
962 {
963 packPoints[pair.second] = (*meshPack->m_MeshResource.positions.attributes)[vertices[pair.first].x];
964 primVerticesMapReverse[pair.second] = pair.first;
965 }
966
967 packPrimPoints.resize(primVertices.size());
968 for (int i = 0; i < primVertices.size(); i++)
969 {
970 glm::uvec3 primVertex = primVertices[i];
971
972 packPrimPoints[i].x = primVerticesMap[primVertex.x];
973 packPrimPoints[i].y = primVerticesMap[primVertex.y];
974 packPrimPoints[i].z = primVerticesMap[primVertex.z];
975 }
976
977 return true;
978 }
#define SPICES_PROFILE_ZONE