Commit b6e85e0f authored by Andrew Zonenberg's avatar Andrew Zonenberg

Fixed a few code style issues, added #ifdef USE_OPENMP

parent 60330de5
...@@ -24,13 +24,17 @@ ...@@ -24,13 +24,17 @@
/** /**
* @file 3d_mesh_model.cpp * @file 3d_mesh_model.cpp
* @brief * @brief
*/ */
#include <3d_mesh_model.h> #include <3d_mesh_model.h>
#include <boost/geometry/algorithms/area.hpp> #include <boost/geometry/algorithms/area.hpp>
#ifdef USE_OPENMP
#include <omp.h>
#endif /* USE_OPENMP */
S3D_MESH::S3D_MESH() S3D_MESH::S3D_MESH()
{ {
isPerFaceNormalsComputed = false; isPerFaceNormalsComputed = false;
...@@ -118,21 +122,21 @@ void S3D_MESH::openGL_Render() ...@@ -118,21 +122,21 @@ void S3D_MESH::openGL_Render()
for( unsigned int idx = 0; idx < m_CoordIndex.size(); idx++ ) for( unsigned int idx = 0; idx < m_CoordIndex.size(); idx++ )
{ {
if( m_MaterialIndex.size() > 1 ) if( m_MaterialIndex.size() > 1 )
{ {
if( m_Materials ) if( m_Materials )
{ {
m_Materials->SetOpenGLMaterial( m_MaterialIndex[idx] ); m_Materials->SetOpenGLMaterial( m_MaterialIndex[idx] );
} }
} }
switch( m_CoordIndex[idx].size() ) switch( m_CoordIndex[idx].size() )
{ {
case 3: glBegin( GL_TRIANGLES );break; case 3: glBegin( GL_TRIANGLES );break;
case 4: glBegin( GL_QUADS ); break; case 4: glBegin( GL_QUADS ); break;
default: glBegin( GL_POLYGON ); break; default: glBegin( GL_POLYGON ); break;
} }
if( m_PerVertexNormalsNormalized.size() > 0 ) if( m_PerVertexNormalsNormalized.size() > 0 )
{ {
...@@ -167,7 +171,7 @@ void S3D_MESH::openGL_Render() ...@@ -167,7 +171,7 @@ void S3D_MESH::openGL_Render()
glNormal3fv( &normal.x ); glNormal3fv( &normal.x );
glm::vec3 point = m_Point[m_CoordIndex[idx][ii]]; glm::vec3 point = m_Point[m_CoordIndex[idx][ii]];
glVertex3fv( &point.x ); glVertex3fv( &point.x );
} }
} }
...@@ -258,7 +262,7 @@ void S3D_MESH::calcPerFaceNormals () ...@@ -258,7 +262,7 @@ void S3D_MESH::calcPerFaceNormals ()
//DBG( printf("m_CoordIndex.size %u\n", m_CoordIndex.size()) ); //DBG( printf("m_CoordIndex.size %u\n", m_CoordIndex.size()) );
//DBG( printf("m_PointNormalized.size %u\n", m_PointNormalized.size()) ); //DBG( printf("m_PointNormalized.size %u\n", m_PointNormalized.size()) );
for( unsigned int idx = 0; idx < m_CoordIndex.size(); idx++ ) for( unsigned int idx = 0; idx < m_CoordIndex.size(); idx++ )
{ {
...@@ -307,7 +311,7 @@ void S3D_MESH::calcPerFaceNormals () ...@@ -307,7 +311,7 @@ void S3D_MESH::calcPerFaceNormals ()
if( haveAlreadyNormals_from_model_file == false ) if( haveAlreadyNormals_from_model_file == false )
{ {
// normalize vertex normal // normalize vertex normal
float l = glm::length( cross_prod ); float l = glm::length( cross_prod );
if( l > FLT_EPSILON ) // avoid division by zero if( l > FLT_EPSILON ) // avoid division by zero
...@@ -331,7 +335,7 @@ void S3D_MESH::calcPerFaceNormals () ...@@ -331,7 +335,7 @@ void S3D_MESH::calcPerFaceNormals ()
m_PerFaceNormalsNormalized.push_back( cross_prod ); m_PerFaceNormalsNormalized.push_back( cross_prod );
} }
} }
} }
...@@ -354,17 +358,19 @@ void S3D_MESH::calcPerPointNormals () ...@@ -354,17 +358,19 @@ void S3D_MESH::calcPerPointNormals ()
} }
m_PerFaceVertexNormals.clear(); m_PerFaceVertexNormals.clear();
// Pre-allocate space for the entire vector of vertex normals so we can do parallel writes // Pre-allocate space for the entire vector of vertex normals so we can do parallel writes
m_PerFaceVertexNormals.resize(m_CoordIndex.size()); m_PerFaceVertexNormals.resize( m_CoordIndex.size() );
// for each face A in mesh // for each face A in mesh
#ifdef USE_OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif
for( unsigned int each_face_A_idx = 0; each_face_A_idx < m_CoordIndex.size(); each_face_A_idx++ ) for( unsigned int each_face_A_idx = 0; each_face_A_idx < m_CoordIndex.size(); each_face_A_idx++ )
{ {
// n = face A facet normal // n = face A facet normal
std::vector< glm::vec3 >& face_A_normals = m_PerFaceVertexNormals[each_face_A_idx]; std::vector< glm::vec3 >& face_A_normals = m_PerFaceVertexNormals[each_face_A_idx];
face_A_normals.resize(m_CoordIndex[each_face_A_idx].size()); face_A_normals.resize( m_CoordIndex[each_face_A_idx].size() );
// loop through all 3 vertices // loop through all 3 vertices
// for each vert in face A // for each vert in face A
...@@ -396,14 +402,14 @@ void S3D_MESH::calcPerPointNormals () ...@@ -396,14 +402,14 @@ void S3D_MESH::calcPerPointNormals ()
} }
} }
// normalize vertex normal // normalize vertex normal
float l = glm::length( face_A_normals[each_vert_A_idx] ); float l = glm::length( face_A_normals[each_vert_A_idx] );
if( l > FLT_EPSILON ) // avoid division by zero if( l > FLT_EPSILON ) // avoid division by zero
{ {
face_A_normals[each_vert_A_idx] /= l; face_A_normals[each_vert_A_idx] /= l;
} }
} }
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment