diff --git a/code/ObjFileParser.cpp b/code/ObjFileParser.cpp index 4c3232fa7..49dce5108 100644 --- a/code/ObjFileParser.cpp +++ b/code/ObjFileParser.cpp @@ -140,6 +140,9 @@ void ObjFileParser::parseFile() if (numComponents == 3) { // read in vertex definition getVector3(m_pModel->m_Vertices); + } else if (numComponents == 4) { + // read in vertex definition (homogeneous coords) + getHomogeneousVector3(m_pModel->m_Vertices); } else if (numComponents == 6) { // read vertex and vertex-color getTwoVectors3(m_pModel->m_Vertices, m_pModel->m_VertexColors); @@ -320,6 +323,26 @@ void ObjFileParser::getVector3( std::vector &point3d_array ) { m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); } +void ObjFileParser::getHomogeneousVector3( std::vector &point3d_array ) { + ai_real x, y, z, w; + copyNextWord(m_buffer, Buffersize); + x = (ai_real) fast_atof(m_buffer); + + copyNextWord(m_buffer, Buffersize); + y = (ai_real) fast_atof(m_buffer); + + copyNextWord( m_buffer, Buffersize ); + z = ( ai_real ) fast_atof( m_buffer ); + + copyNextWord( m_buffer, Buffersize ); + w = ( ai_real ) fast_atof( m_buffer ); + + ai_assert( w != 0 ); + + point3d_array.push_back( aiVector3D( x/w, y/w, z/w ) ); + m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); +} + // ------------------------------------------------------------------- // Get values for two 3D vectors on the same line void ObjFileParser::getTwoVectors3( std::vector &point3d_array_a, std::vector &point3d_array_b ) { diff --git a/code/ObjFileParser.h b/code/ObjFileParser.h index f1be764f0..ce7c34655 100644 --- a/code/ObjFileParser.h +++ b/code/ObjFileParser.h @@ -89,6 +89,8 @@ private: void getVector( std::vector &point3d_array ); /// Stores the following 3d vector. void getVector3( std::vector &point3d_array ); + /// Stores the following homogeneous vector as a 3D vector + void getHomogeneousVector3( std::vector &point3d_array ); /// Stores the following two 3d vectors on the line. void getTwoVectors3( std::vector &point3d_array_a, std::vector &point3d_array_b ); /// Stores the following 3d vector.