summaryrefslogtreecommitdiffstats
path: root/src/datavis3d/utils/vertexindexer_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavis3d/utils/vertexindexer_p.h')
-rw-r--r--src/datavis3d/utils/vertexindexer_p.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/datavis3d/utils/vertexindexer_p.h b/src/datavis3d/utils/vertexindexer_p.h
new file mode 100644
index 00000000..f784756e
--- /dev/null
+++ b/src/datavis3d/utils/vertexindexer_p.h
@@ -0,0 +1,60 @@
+#ifndef VERTEXINDEXER_P_H
+#define VERTEXINDEXER_P_H
+
+#include "qdatavis3dglobal.h"
+
+#include <QVector>
+#include <QVector2D>
+#include <QVector3D>
+
+QTCOMMERCIALDATAVIS3D_BEGIN_NAMESPACE
+
+class VertexIndexer
+{
+ public:
+ struct PackedVertex {
+ QVector3D position;
+ QVector2D uv;
+ QVector3D normal;
+ bool operator<(const PackedVertex that) const {
+ return memcmp((void*)this, (void*)&that, sizeof(PackedVertex)) > 0;
+ }
+ };
+
+ static void indexVBO(QVector<QVector3D> &in_vertices
+ , QVector<QVector2D> &in_uvs
+ , QVector<QVector3D> &in_normals
+ , QVector<unsigned short> &out_indices
+ , QVector<QVector3D> &out_vertices
+ , QVector<QVector2D> &out_uvs
+ , QVector<QVector3D> &out_normals);
+
+ static void indexVBO_TBN(QVector<QVector3D> &in_vertices
+ , QVector<QVector2D> &in_uvs
+ , QVector<QVector3D> &in_normals
+ , QVector<QVector3D> &in_tangents
+ , QVector<QVector3D> &in_bitangents
+ , QVector<unsigned short> &out_indices
+ , QVector<QVector3D> &out_vertices
+ , QVector<QVector2D> &out_uvs
+ , QVector<QVector3D> &out_normals
+ , QVector<QVector3D> &out_tangents
+ , QVector<QVector3D> &out_bitangents);
+
+ private:
+ static bool is_near(float v1, float v2);
+ static bool getSimilarVertexIndex(QVector3D &in_vertex
+ , QVector2D &in_uv
+ , QVector3D &in_normal
+ , QVector<QVector3D> &out_vertices
+ , QVector<QVector2D> &out_uvs
+ , QVector<QVector3D> &out_normals
+ , unsigned short &result);
+ static bool getSimilarVertexIndex_fast(PackedVertex &packed
+ , QMap<PackedVertex, unsigned short> &VertexToOutIndex
+ , unsigned short &result);
+};
+
+QTCOMMERCIALDATAVIS3D_END_NAMESPACE
+
+#endif