diff options
Diffstat (limited to 'src/datavis3d/utils/vertexindexer_p.h')
-rw-r--r-- | src/datavis3d/utils/vertexindexer_p.h | 60 |
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 |