diff options
author | Tomi Korpipää <tomi.korpipaa@digia.com> | 2013-03-07 12:28:15 +0200 |
---|---|---|
committer | Tomi Korpipää <tomi.korpipaa@digia.com> | 2013-03-07 12:28:15 +0200 |
commit | fe21dc562504ccb87f8a1b01ea96cc7865064b72 (patch) | |
tree | c4e444662a03ee0b3383eeeb09ccbdc313b4f753 /src/datavis3d/utils/vertexindexer_p.h | |
parent | a1c579f4e9eb94488550b329a9e1c27a461bfd2e (diff) |
Initial version of QtDataVis3D
Includes:
- initial version of q3dbars
- an example using it
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 |