Changeset 224 for trunk/src/formats/obj_loader.cc
- Timestamp:
- 01/02/14 20:52:34 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/formats/obj_loader.cc
r204 r224 119 119 struct mesh_obj_reader : public obj_reader 120 120 { 121 mesh_obj_reader( mesh * m ) : m_position( nullptr ), m_normal( nullptr ), m_tex_coord( nullptr ), m_tangent( nullptr ),m_mesh( m ) {}121 mesh_obj_reader( mesh_data_creator* m ) : m_mesh( m ) {} 122 122 virtual std::size_t add_face( uint32* v, uint32* t, uint32* n, size_t count ); 123 123 virtual void calculate_tangents(); 124 124 125 vertex_attribute< vec3 >* m_position; 126 vertex_attribute< vec3 >* m_normal; 127 vertex_attribute< vec2 >* m_tex_coord; 128 vertex_attribute< vec4 >* m_tangent; 129 mesh* m_mesh; 125 mesh_data_creator* m_mesh; 130 126 }; 131 127 … … 138 134 } 139 135 140 if ( m_position == nullptr )141 {142 m_position = m_mesh->add_attribute< vec3 >( "nv_position" );143 }144 if ( m_tex_coord == nullptr )145 {146 m_tex_coord = m_mesh->add_attribute< vec2 >( "nv_texcoord" );147 }148 if ( m_normal == nullptr && ni != nullptr )149 {150 m_normal = m_mesh->add_attribute< vec3 >( "nv_normal" );151 }152 153 136 // TODO : support if normals not present; 154 137 155 std::vector< vec3 >& vp = m_ position->get();156 std::vector< vec 2 >& vt = m_tex_coord->get();157 std::vector< vec 3 >& vn = m_normal->get();138 std::vector< vec3 >& vp = m_mesh->get_positions(); 139 std::vector< vec3 >& vn = m_mesh->get_normals(); 140 std::vector< vec2 >& vt = m_mesh->get_texcoords(); 158 141 159 142 std::size_t result = 0; … … 174 157 void mesh_obj_reader::calculate_tangents() 175 158 { 176 m_tangent = m_mesh->add_attribute< vec4 >( "nv_tangent" ); 177 178 std::vector< vec3 >& vp = m_position->get(); 179 std::vector< vec2 >& vt = m_tex_coord->get(); 180 std::vector< vec3 >& vn = m_normal->get(); 181 std::vector< vec4 >& tg = m_tangent->get(); 159 const std::vector< vec3 >& vp = m_mesh->get_positions(); 160 const std::vector< vec2 >& vt = m_mesh->get_texcoords(); 161 const std::vector< vec3 >& vn = m_mesh->get_normals(); 162 std::vector< vec3 >& tg = m_mesh->get_tangents(); 182 163 183 164 size_t count = vp.size(); … … 225 206 tan1[i3] += sdir; 226 207 208 // tan2 not needed anymore?? 227 209 tan2[i1] += tdir; 228 210 tan2[i2] += tdir; … … 235 217 const vec3& t = tan1[a]; 236 218 237 tg[a] = vec 4( glm::normalize(t - n * glm::dot( n, t )),238 (glm::dot(glm::cross(n, t), tan2[a]) < 0.0f) ? -1.0f : 1.0f );219 tg[a] = vec3( glm::normalize(t - n * glm::dot( n, t )) ); 220 //tg[a][3] = (glm::dot(glm::cross(n, t), tan2[a]) < 0.0f) ? -1.0f : 1.0f; 239 221 } 240 222 … … 258 240 delete m_mesh; 259 241 } 260 m _mesh = new mesh();261 mesh_obj_reader reader( m_mesh);242 mesh_data_creator creator; 243 mesh_obj_reader reader( &creator ); 262 244 std_stream sstream( &source ); 263 245 reader.read_stream( sstream ); … … 267 249 reader.calculate_tangents(); 268 250 } 251 m_mesh = creator.release(); 269 252 return true; 270 253 }
Note: See TracChangeset
for help on using the changeset viewer.