00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef NVBLASTEXTAUTHORINGTRIANGULATOR_H
00030 #define NVBLASTEXTAUTHORINGTRIANGULATOR_H
00031
00032
00033 #include <vector>
00034 #include <map>
00035 #include "NvBlastExtAuthoringTypes.h"
00036 #include "NvBlastExtAuthoringMesh.h"
00037 #include "NvBlastExtAuthoringInternalCommon.h"
00038
00039 namespace Nv
00040 {
00041 namespace Blast
00042 {
00043
00044
00048 class Triangulator
00049 {
00050 public:
00055 void triangulate(const Mesh* mesh);
00056
00060 std::vector<Triangle>& getBaseMesh()
00061 {
00062 return mBaseMeshUVFittedTriangles;
00063 }
00064
00065 std::vector<Triangle>& getBaseMeshNotFitted()
00066 {
00067 return mBaseMeshResultTriangles;
00068 }
00069
00070
00074 std::vector<TriangleIndexed>& getBaseMeshIndexed()
00075 {
00076 return mBaseMeshTriangles;
00077 }
00081 std::vector<uint32_t>& getBaseMapping()
00082 {
00083 return mBaseMapping;
00084 };
00088 std::vector<int32_t>& getPositionedMapping()
00089 {
00090 return mPositionMappedVrt;
00091 };
00095 uint32_t getWeldedVerticesCount()
00096 {
00097 return static_cast<uint32_t>(mVertices.size());
00098 }
00099
00103 void reset();
00104
00105 int32_t& getParentChunkId() { return parentChunkId; };
00106
00107 private:
00108
00109 int32_t parentChunkId;
00110
00111 int32_t addVerticeIfNotExist(const Vertex& p);
00112 void addEdgeIfValid(EdgeWithParent& ed);
00113
00114
00115
00116 std::vector<Vertex> mVertices;
00117 std::vector<EdgeWithParent> mBaseMeshEdges;
00118 std::map<Vertex, int32_t, VrtComp> mVertMap;
00119 std::map<EdgeWithParent, int32_t, EdgeComparator> mEdgeMap;
00120 std::vector<uint32_t> mBaseMapping;
00121 std::vector<int32_t> mPositionMappedVrt;
00122
00123
00124
00128 void prepare(const Mesh* mesh);
00129
00130
00131
00132 void triangulatePolygonWithEarClipping(std::vector<uint32_t>& inputPolygon, Vertex* vert, ProjectionDirections dir);
00133 void buildPolygonAndTriangulate(std::vector<Edge>& edges, Vertex* vertices, int32_t userData, int32_t materialId, int32_t smoothingGroup);
00134 void computePositionedMapping();
00135
00136 std::vector<TriangleIndexed> mBaseMeshTriangles;
00140 std::vector<Triangle> mBaseMeshResultTriangles;
00141 std::vector<Triangle> mBaseMeshUVFittedTriangles;
00142 };
00143
00144 }
00145 }
00146
00147
00148 #endif // ifndef NVBLASTEXTAUTHORINGTRIANGULATOR_H