Fixed a few code style issues, added #ifdef USE_OPENMP
This commit is contained in:
parent
60330de551
commit
b6e85e0f82
|
@ -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()
|
||||||
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()
|
||||||
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 ()
|
||||||
|
|
||||||
//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 ()
|
||||||
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 ()
|
||||||
|
|
||||||
m_PerFaceNormalsNormalized.push_back( cross_prod );
|
m_PerFaceNormalsNormalized.push_back( cross_prod );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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 ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue