MeshTools.cpp 966 B

12345678910111213141516171819202122
  1. // Include own header
  2. #include "MeshTools.hpp"
  3. void MeshTools::calculateNormals(const std::vector<Lib3MF::sPosition> verticesBuffer, const std::vector<Lib3MF::sTriangle> triangleBuffer, osg::ref_ptr<osg::Vec3Array> vertices, osg::ref_ptr<osg::Vec3Array> normals) {
  4. for (const Lib3MF::sTriangle triangle: triangleBuffer) {
  5. // Create osg vectors
  6. osg::Vec3 vertex[3] = {};
  7. for (char i = 0; i < 3; i++) {
  8. vertex[i] = osg::Vec3(verticesBuffer[triangle.m_Indices[i]].m_Coordinates[0], verticesBuffer[triangle.m_Indices[i]].m_Coordinates[1], verticesBuffer[triangle.m_Indices[i]].m_Coordinates[2]);
  9. }
  10. // Calculate normal
  11. osg::Vec3 edgeOne = vertex[1].operator-(vertex[0]);
  12. osg::Vec3 edgeTwo = vertex[2].operator-(vertex[0]);
  13. osg::Vec3 normal = edgeOne.operator^(edgeTwo);
  14. normal.normalize();
  15. // Store them
  16. for (int i = 0; i < 3; i++) {
  17. vertices->push_back(vertex[i]);
  18. normals->push_back(normal);
  19. }
  20. }
  21. }