OZ++ Class: OpenGLColorsNormalsVertices |
#pragma once #include <oz++/ArrayT.h> #include <oz++/opengl/Color4.h> #include <oz++/opengl/Normal3.h> #include <oz++/opengl/Vertex3.h> #include <oz++/opengl/TriangleIndices.h> namespace OZ { /* typedef ArrayT<Color4> Colors; typedef ArrayT<Normal3> Normals; typedef ArrayT<Vertex3> Vertices; */ class OpenGLColorsNormalsVertices { private: ArrayT<Color4>* colors; ArrayT<Normal3>* normals; ArrayT<Vertex3>* vertices; public; OpenGLColorsNormalsVertices(Vertex3* array=NULL, size_t number=0) :colors(NULL), normals(NULL), vertices(NULL) { if (array && number > 0) { vertices = new ArrayT<Vertex3>(array, numVert); } } ~OpenGLColorsNormalsVertices() { delete colors; colors = NULL; delete normals; normals = NULL; delete vertices; vertices = NULL; } void clearNormals() { delete normals; normals = NULL; normals = new ArrayT<Normal3>(); } void setColors(const Color4* array, size_t number) { if (array && number > 0) { delete colors; colors = new ArrayT<Color4>(array, number; } else { throw IException("Invalid parameter."); } } void setNormals(const Normal3* array, size_t number) { if (array && number > 0) { delete normals; normals = new ArrayT<Normal3>(array, number); } else { throw IException("Invalid parameter."); } } void setVertices(const Vertex3* array, size_t number) { if (array && number > 0) { delete vertices; vertices = new ArrayT<Vertex3>(array, number); } else { throw IException("Invalid parameter."); } } void calculateFaceNormals(ArrayT<TriangleIndices>* triangles) //Easy going way. { if (verices && triangles) { clearNormals(); size_t number = triangles->getSize(); for (int i = 0; i<number; i++) { Triangle* tri = triangles[i]; Vector3f v1 = vertices[tri->n1]; Vector3f v2 = vertices[tri->n2]; Vector3f v3 = vertices[tri->n3]; Vector3f normal = Vector3f::crossProduct(v1 - v0, v2 - v0); normal.normalize(); normals[i] = new Normal3(normal[0], normal[1], normal[2]); } //vertices } } }; }