Changeset 541
- Timestamp:
- 03/06/08 15:15:53 (10 months ago)
- Files:
-
- trunk/bin/win32/release (8.5)/bin/maya2q3.mll (modified) (previous)
- trunk/bin/win32/release (8.5)/bin/maya2q3.pdb (modified) (previous)
- trunk/maya2q3/bsp.cpp (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/maya2q3/bsp.cpp
r540 r541 90 90 { 91 91 m_unitScale = 0.01F; 92 m_combineMeshes = true; //augh!92 m_combineMeshes = false; 93 93 } 94 94 … … 248 248 std::vector< q3::dshader_t > shaders = ReadLump< q3::dshader_t >( q3::LUMP_SHADERS ); 249 249 250 m_meshes.setLength( (uint)surfs.size() ); 250 typedef std::map< int, std::vector< int > > MapSetMap; 251 typedef MapSetMap::iterator MapSetIter; 252 253 MapSetMap materialSets; 251 254 for( uint i = 0; i < surfs.size(); i++ ) 252 255 { 253 256 const q3::dsurface_t &surf = surfs[i]; 254 257 258 int surfIndex; 255 259 switch( surf.surfaceType ) 256 260 { 257 261 case q3::MST_PLANAR: 258 262 case q3::MST_TRIANGLE_SOUP: 259 { 260 int shader = GetShaderIndex( shaders, surf.shaderNum, surf.lightmapNum ); 261 ParseTriangles( verts, indices, shader, surf.firstVert, surf.numVerts, surf.firstIndex, surf.numIndexes ); 262 } 263 surfIndex = (int)i; 263 264 break; 264 265 … … 267 268 q3::Patch p = q3::SubdividePatchToGrid( surf.patchWidth, surf.patchHeight, &verts[surf.firstVert] ); 268 269 p.meshIdx = i; 270 269 271 m_patchStaging.push_back( p ); 272 surfIndex = -(int)m_patchStaging.size(); 270 273 } 271 274 break; 272 275 273 276 default: 274 warn( "Ignoring surface." ); 275 } 276 277 if( m_verts.length() && !m_combineMeshes ) 278 { 279 m_meshes[i] = CreateMesh(); 280 ClearStagingArea(); 281 } 277 continue; 278 } 279 280 int shader = GetShaderIndex( shaders, surf.shaderNum, surf.lightmapNum ); 281 282 if( shader == -1 ) 283 continue; 284 285 MapSetIter matIter = materialSets.find( shader ); 286 if( matIter == materialSets.end() ) 287 { 288 std::pair< MapSetIter, bool > 289 insPos = materialSets.insert( MapSetIter::value_type( shader, std::vector< int >() ) ); 290 291 if( !insPos.second ) 292 continue; 293 294 matIter = insPos.first; 295 } 296 297 matIter->second.push_back( surfIndex ); 282 298 } 283 299 … … 285 301 q3::FixSharedVertexLodError( m_patchStaging ); 286 302 287 { 288 std::vector< int > indices; 289 std::vector< q3::drawVert_t > verts; 290 291 for( uint i = 0; i < m_patchStaging.size(); i++ ) 292 { 293 q3::Patch &p = m_patchStaging[i]; 294 const q3::dsurface_t &srcSurf = surfs[p.meshIdx]; 295 296 int shader = GetShaderIndex( shaders, srcSurf.shaderNum, srcSurf.lightmapNum ); 297 298 q3::PatchToMesh( p, verts, indices ); 299 ParseTriangles( verts, indices, shader ); 300 301 if( m_verts.length() && !m_combineMeshes ) 303 std::vector< int > tmpIndices; 304 std::vector< q3::drawVert_t > tmpVerts; 305 306 for( MapSetIter iter = materialSets.begin(); iter != materialSets.end(); ++iter ) 307 { 308 std::vector< int > &surfIdxs = iter->second; 309 for( uint i = 0; i < surfIdxs.size(); i++ ) 310 { 311 if( surfIdxs[i] < 0 ) 302 312 { 303 m_meshes[p.meshIdx] = CreateMesh(); 304 ClearStagingArea(); 313 const q3::Patch &p = m_patchStaging[-surfIdxs[i] - 1]; 314 315 q3::PatchToMesh( p, tmpVerts, tmpIndices ); 316 ParseTriangles( tmpVerts, tmpIndices, iter->first ); 305 317 } 318 else 319 { 320 const q3::dsurface_t &surf = surfs[surfIdxs[i]]; 321 322 ParseTriangles( verts, indices, iter->first, surf.firstVert, 323 surf.numVerts, surf.firstIndex, surf.numIndexes ); 324 } 325 } 326 327 if( !m_combineMeshes && m_verts.length() ) 328 { 329 m_meshes.append( CreateMesh() ); 330 ClearStagingArea(); 306 331 } 307 332 } 308 333 309 334 if( m_verts.length() ) 310 {311 335 m_meshes.append( CreateMesh() ); 312 ClearStagingArea(); 313 }336 337 ClearStagingArea(); 314 338 315 339 m_patchStaging.clear(); … … 340 364 check_status( stat ); 341 365 342 MString texCoordSetName( " TexCoords" );343 stat = mesh.createUVSet( texCoordSetName );344 check_status( stat );366 MString texCoordSetName( "map1" ); 367 //stat = mesh.createUVSet( texCoordSetName ); 368 //check_status( stat ); 345 369 stat = mesh.setUVs( m_textureU, m_textureV, &texCoordSetName ); 346 370 check_status( stat ); … … 358 382 stat = mesh.setCurrentUVSetName( texCoordSetName ); 359 383 check_status( stat ); 360 361 mesh.deleteUVSet( "map1" );362 384 363 385 MString vertexLightName( "VertexLight" );
