summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/utils/vertexindexer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavisualization/utils/vertexindexer.cpp')
-rw-r--r--src/datavisualization/utils/vertexindexer.cpp85
1 files changed, 7 insertions, 78 deletions
diff --git a/src/datavisualization/utils/vertexindexer.cpp b/src/datavisualization/utils/vertexindexer.cpp
index c34203da..90528d05 100644
--- a/src/datavisualization/utils/vertexindexer.cpp
+++ b/src/datavisualization/utils/vertexindexer.cpp
@@ -24,45 +24,11 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
int unique_vertices = 0;
-// Returns true if v1 can be considered equal to v2
-bool VertexIndexer::is_near(float v1, float v2)
-{
- return qAbs(v1 - v2) < 0.01f;
-}
-
-// Searches through all already exported vertices for a similar one.
-// Similar = same position + same UVs + same normal
-bool VertexIndexer::getSimilarVertexIndex(const QVector3D &in_vertex,
- const QVector2D &in_uv,
- const QVector3D &in_normal,
- QVector<QVector3D> &out_vertices,
- QVector<QVector2D> &out_uvs,
- QVector<QVector3D> &out_normals,
- unsigned short &result)
-{
- // Linear search
- for (int i = 0; i < out_vertices.size(); i++) {
- if (is_near(in_vertex.x() , out_vertices[i].x())
- && is_near(in_vertex.y() , out_vertices[i].y())
- && is_near(in_vertex.z() , out_vertices[i].z())
- && is_near(in_uv.x() , out_uvs [i].x())
- && is_near(in_uv.y() , out_uvs [i].y())
- && is_near(in_normal.x() , out_normals [i].x())
- && is_near(in_normal.y() , out_normals [i].y())
- && is_near(in_normal.z() , out_normals [i].z())) {
- result = i;
- return true;
- }
- }
- // No other vertex could be used instead
- return false;
-}
-
bool VertexIndexer::getSimilarVertexIndex_fast(const PackedVertex &packed,
- QMap<PackedVertex, unsigned short> &VertexToOutIndex,
- unsigned short &result)
+ QMap<PackedVertex, GLuint> &VertexToOutIndex,
+ GLuint &result)
{
- QMap<PackedVertex, unsigned short>::iterator it = VertexToOutIndex.find(packed);
+ QMap<PackedVertex, GLuint>::iterator it = VertexToOutIndex.find(packed);
if (it == VertexToOutIndex.end()) {
return false;
} else {
@@ -74,20 +40,20 @@ bool VertexIndexer::getSimilarVertexIndex_fast(const PackedVertex &packed,
void VertexIndexer::indexVBO(const QVector<QVector3D> &in_vertices,
const QVector<QVector2D> &in_uvs,
const QVector<QVector3D> &in_normals,
- QVector<unsigned short> &out_indices,
+ QVector<GLuint> &out_indices,
QVector<QVector3D> &out_vertices,
QVector<QVector2D> &out_uvs,
QVector<QVector3D> &out_normals)
{
unique_vertices = 0;
- QMap<PackedVertex, unsigned short> VertexToOutIndex;
+ QMap<PackedVertex, GLuint> VertexToOutIndex;
// For each input vertex
for (int i = 0; i < in_vertices.size(); i++) {
PackedVertex packed = {in_vertices[i], in_uvs[i], in_normals[i]};
// Try to find a similar vertex in out_XXXX
- unsigned short index;
+ GLuint index;
bool found = getSimilarVertexIndex_fast(packed, VertexToOutIndex, index);
if (found) {
@@ -97,48 +63,11 @@ void VertexIndexer::indexVBO(const QVector<QVector3D> &in_vertices,
out_vertices.append(in_vertices[i]);
out_uvs.append(in_uvs[i]);
out_normals.append(in_normals[i]);
- unsigned short newindex = (unsigned short)out_vertices.size() - 1;
+ GLuint newindex = (GLuint)out_vertices.size() - 1;
out_indices.append(newindex);
VertexToOutIndex[packed] = newindex;
}
}
}
-void VertexIndexer::indexVBO_TBN(const QVector<QVector3D> &in_vertices,
- const QVector<QVector2D> &in_uvs,
- const QVector<QVector3D> &in_normals,
- const QVector<QVector3D> &in_tangents,
- const 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)
-{
- unique_vertices = 0;
- // For each input vertex
- for (int i = 0; i < in_vertices.size(); i++) {
- // Try to find a similar vertex in out_XXXX
- unsigned short index;
- bool found = getSimilarVertexIndex(in_vertices[i], in_uvs[i], in_normals[i],
- out_vertices, out_uvs, out_normals, index);
-
- if (found) {
- out_indices.append(index);
- // Average the tangents and the bitangents
- out_tangents[index] += in_tangents[i];
- out_bitangents[index] += in_bitangents[i];
- } else {
- unique_vertices++;
- out_vertices.append(in_vertices[i]);
- out_uvs.append(in_uvs[i]);
- out_normals.append(in_normals[i]);
- out_tangents.append(in_tangents[i]);
- out_bitangents.append(in_bitangents[i]);
- out_indices.append((unsigned short)out_vertices.size() - 1);
- }
- }
-}
-
QT_END_NAMESPACE_DATAVISUALIZATION