123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- #pragma once
- #include <algorithm>
- #include <map>
- #include <vector>
- namespace WwiseGTE
- {
- template <typename VertexType>
- class UniqueVerticesTriangles
- {
- public:
-
-
-
-
-
-
-
- UniqueVerticesTriangles(
- std::vector<VertexType> const& inVertices,
- std::vector<VertexType>& outVertices,
- std::vector<int>& outIndices)
- {
- ConstructUniqueVertices(inVertices, outVertices);
-
-
-
-
- outIndices.resize(inVertices.size());
- std::copy(mInToOutMapping.begin(), mInToOutMapping.end(),
- outIndices.begin());
- }
-
-
-
-
-
-
- UniqueVerticesTriangles(
- std::vector<VertexType> const& inVertices,
- std::vector<int> const& inIndices,
- std::vector<VertexType>& outVertices,
- std::vector<int>& outIndices)
- {
- ConstructUniqueVertices(inVertices, outVertices);
-
-
- outIndices.resize(inIndices.size());
- for (size_t i = 0; i < inIndices.size(); ++i)
- {
- outIndices[i] = mInToOutMapping[inIndices[i]];
- }
- }
-
-
-
-
-
-
-
- inline int GetOutputIndexFor(int index) const
- {
- return mInToOutMapping[index];
- }
- private:
- void ConstructUniqueVertices(std::vector<VertexType> const& inVertices,
- std::vector<VertexType>& outVertices)
- {
-
- mNumInVertices = (int)inVertices.size();
- mInToOutMapping.resize(mNumInVertices);
- std::map<VertexType, int> table;
- mNumOutVertices = 0;
- for (int i = 0; i < mNumInVertices; ++i)
- {
- auto const iter = table.find(inVertices[i]);
- if (iter != table.end())
- {
-
-
- mInToOutMapping[i] = iter->second;
- }
- else
- {
-
- table.insert(std::make_pair(inVertices[i], mNumOutVertices));
- mInToOutMapping[i] = mNumOutVertices;
- ++mNumOutVertices;
- }
- }
-
- outVertices.resize(mNumOutVertices);
- for (auto const& element : table)
- {
- outVertices[element.second] = element.first;
- }
- }
- int mNumInVertices, mNumOutVertices;
- std::vector<int> mInToOutMapping;
- };
- }
|