All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
MeshDataExtensions.h
1 // Copyright eeGeo Ltd (2012-2014), All Rights Reserved
2 
3 #pragma once
4 
5 #include "ChunkedFileFormat.h"
6 #include "VectorMath.h"
7 #include "GenericMeshData.h"
8 #include <vector>
9 #include <limits>
10 
11 namespace Eegeo
12 {
13  namespace IO
14  {
15  namespace ChunkedFileFormat
16  {
17  namespace MeshDataExtensions
18  {
19 
20  template <typename TVertex>
21  void UnpackVertices(const Eegeo::IO::ChunkedFileFormat::GenericMeshData<TVertex> &meshData,
22  std::vector<Eegeo::v3> &vertices)
23  {
24  float xRange =meshData.maxVertexRange.GetX() - meshData.minVertexRange.GetX();
25  float yRange =meshData.maxVertexRange.GetY() - meshData.minVertexRange.GetY();
26  float zRange =meshData.maxVertexRange.GetZ() - meshData.minVertexRange.GetZ();
27 
28  float uShortMax = std::numeric_limits<u16>::max();
29 
30  float xFactor = xRange/uShortMax;
31  float yFactor = yRange/uShortMax;
32  float zFactor = zRange/uShortMax;
33 
34  for(int i = 0;i < meshData.numVerts; i++)
35  {
36  float x = meshData.pVertexBuffer[i].x*xFactor + meshData.minVertexRange.GetX();
37  float y = meshData.pVertexBuffer[i].y*yFactor + meshData.minVertexRange.GetY();
38  float z = meshData.pVertexBuffer[i].z*zFactor + meshData.minVertexRange.GetZ();
39 
40  vertices.push_back(Eegeo::v3(x,y,z));
41  }
42  }
43 
44  template <typename TVertex>
45  v3 UnpackVertex(const Eegeo::IO::ChunkedFileFormat::GenericMeshData<TVertex> &meshData, int vertexIndex)
46  {
47  const TVertex& v = meshData.pVertexBuffer[vertexIndex];
48  v3 source(v.x, v.y, v.z);
49  v3 scale(meshData.maxVertexRange - meshData.minVertexRange);
50  scale *= (1.0f / std::numeric_limits<u16>::max());
51  v3 result = meshData.minVertexRange + source*scale;
52  return result;
53  }
54 
55  };
56  }
57  }
58 }