Changeset 543
- Timestamp:
- 03/06/08 19:29:25 (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) (14 diffs)
- trunk/maya2q3/maya_entry.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/maya2q3/bsp.cpp
r542 r543 29 29 public: 30 30 BspImporter( void ); 31 void Import( std::istream &stm );31 void Import( std::istream &stm, const MObject &parentTransform ); 32 32 33 33 private: 34 float m_unitScale;35 34 bool m_combineMeshes; 36 35 … … 51 50 52 51 MObjectArray m_meshes; 52 MDagPathArray m_meshPaths; 53 53 54 54 std::vector< std::pair< int, int > > m_shaderMap; … … 56 56 MObjectArray m_shaders; 57 57 58 MSelectionList m_miscLmapSels; 59 std::vector< MSelectionList > m_lmapSels; 60 std::vector< MSelectionList > m_shaderSels; 61 58 62 q3::dheader_t m_fileHeader; 59 63 BinaryReader *m_fileData; … … 77 81 int firstVert = 0, int vertexCount = -1, int firstIndex = 0, int indexCount = -1 ); 78 82 79 MObjectCreateMesh();83 void CreateMesh(); 80 84 void ClearStagingArea(); 81 85 … … 83 87 84 88 void ImportSurfaces(); 89 void CreateShaderQuickSelects(); 90 void CreateQuickSelect( const MSelectionList &sel, const MString &name ); 91 92 void GroupMeshNodes( const MObject &parentXform ); 85 93 }; 86 94 87 95 #pragma warning( disable : 4100 ) //shut up unreferenced parameter warnings until dev of this file is done 88 96 97 template< size_t n > 98 static void MangleShaderName( sstr< n > &ret, const char *src ) 99 { 100 for( char c = *src++; c; c = *src++ ) 101 { 102 switch( c ) 103 { 104 case '_': 105 ret.Append( "__" ); 106 break; 107 108 case '.': 109 case '/': 110 case '\\': 111 ret.Append( "_" ); 112 break; 113 114 default: 115 ret.Append( "%c", c ); 116 break; 117 } 118 } 119 } 120 89 121 BspImporter::BspImporter( void ) 90 122 { 91 m_unitScale = 0.01F;92 123 m_combineMeshes = false; 93 124 } … … 104 135 } 105 136 137 if( shaderNum >= (int)m_shaderSels.size() ) 138 m_shaderSels.resize( shaderNum + 1 ); 139 if( lightmapNum >= 0 && lightmapNum >= (int)m_lmapSels.size() ) 140 m_lmapSels.resize( lightmapNum + 1 ); 141 106 142 const q3::dshader_t &shader = shaders[shaderNum]; 107 143 sstr< 1024 > buf; 108 144 109 size_t srcLen = shader.shader.Length(); 110 for( size_t i = 0; i < srcLen; i++ ) 111 { 112 char c = shader.shader[i]; 113 switch( c ) 114 { 115 case '_': 116 buf.Append( "__" ); 117 break; 118 119 case '/': 120 case '\\': 121 buf.Append( "_" ); 122 break; 123 124 default: 125 buf.Append( "%c", c ); 126 break; 127 } 128 } 145 MangleShaderName( buf, shader.shader ); 129 146 130 147 if( lightmapNum >= 0 ) … … 200 217 const q3::drawVert_t &v = verts[firstVert + i]; 201 218 202 m_verts.append( MPoint( q3::Q3VecToMaya( v.xyz ) * m_unitScale) );219 m_verts.append( MPoint( q3::Q3VecToMaya( v.xyz ) ) ); 203 220 m_textureU.append( v.st.x ); 204 221 m_textureV.append( v.st.y ); … … 327 344 if( !m_combineMeshes && m_verts.length() ) 328 345 { 329 m_meshes.append( CreateMesh());346 CreateMesh(); 330 347 ClearStagingArea(); 331 348 } … … 333 350 334 351 if( m_verts.length() ) 335 m_meshes.append( CreateMesh());352 CreateMesh(); 336 353 337 354 ClearStagingArea(); … … 340 357 } 341 358 342 void BspImporter::Import( std::istream &stm ) 343 { 344 size_t base_pos = stm.tellg(); 345 346 BinaryReader in( stm ); 347 348 in >> m_fileHeader; 349 for( int i = 0; i < q3::HEADER_LUMPS; i++ ) 350 m_fileHeader.lumps[i].fileofs += base_pos; 351 352 m_fileData = ∈ 353 354 ImportSurfaces(); 355 } 356 357 MObject BspImporter::CreateMesh( void ) 359 void BspImporter::CreateMesh( void ) 358 360 { 359 361 MStatus stat; … … 365 367 366 368 MString texCoordSetName( "map1" ); 367 //stat = mesh.createUVSet( texCoordSetName );368 //check_status( stat );369 369 stat = mesh.setUVs( m_textureU, m_textureV, &texCoordSetName ); 370 370 check_status( stat ); … … 405 405 continue; 406 406 407 MSelectionList *pLmapSel = &m_miscLmapSels; 408 MSelectionList *pShaderSel = &m_shaderSels[m_shaderMap[i].first]; 409 410 if( m_shaderMap[i].second >= 0 ) 411 pLmapSel = &m_lmapSels[m_shaderMap[i].second]; 412 407 413 MFnSet fnSg( m_shaders[i], &stat ); 408 414 check_status( stat ); 409 415 410 MItMeshPolygon polyIt( objPath, MObject::kNullObj, &stat ); 411 check_status( stat ); 412 413 MSelectionList sel; 414 415 for( uint j = 0; j < map.size(); j++ ) 416 { 417 int prevIndex; 418 stat = polyIt.setIndex( map[j], prevIndex ); 419 check_status( stat ); 420 421 MObject comp = polyIt.polygon( &stat ); 422 check_status( stat ); 423 424 stat = sel.add( objPath, comp ); 425 check_status( stat ); 426 } 427 428 stat = fnSg.addMembers( sel ); 429 check_status( stat ); 430 } 431 432 //MString cmd = MString( "sets -e -fe initialShadingGroup " ) + mesh.name(); 433 //stat = MGlobal::executeCommand( cmd ); 434 //check_status( stat ); 435 436 return ret; 416 if( m_combineMeshes ) 417 { 418 MItMeshPolygon polyIt( objPath, MObject::kNullObj, &stat ); 419 check_status( stat ); 420 421 MSelectionList sel; 422 423 for( uint j = 0; j < map.size(); j++ ) 424 { 425 int prevIndex; 426 stat = polyIt.setIndex( map[j], prevIndex ); 427 check_status( stat ); 428 429 MObject comp = polyIt.polygon( &stat ); 430 check_status( stat ); 431 432 stat = sel.add( objPath, comp ); 433 check_status( stat ); 434 435 stat = pLmapSel->add( objPath, comp ); 436 check_status( stat ); 437 438 stat = pShaderSel->add( objPath, comp ); 439 check_status( stat ); 440 } 441 442 stat = fnSg.addMembers( sel ); 443 check_status( stat ); 444 } 445 else 446 { 447 //mesh will be one shader only - this one 448 stat = fnSg.addMember( objPath ); 449 check_status( stat ); 450 451 stat = pLmapSel->add( objPath ); 452 check_status( stat ); 453 454 stat = pShaderSel->add( objPath ); 455 check_status( stat ); 456 } 457 } 458 459 m_meshPaths.append( objPath ); 460 m_meshes.append( ret ); 437 461 } 438 462 … … 458 482 } 459 483 484 void BspImporter::CreateShaderQuickSelects() 485 { 486 std::vector< q3::dshader_t > shaders = ReadLump< q3::dshader_t >( q3::LUMP_SHADERS ); 487 488 CreateQuickSelect( m_miscLmapSels, "lmap_none" ); 489 490 for( uint i = 0; i < m_lmapSels.size(); i++ ) 491 { 492 if( !m_lmapSels[i].length() ) 493 continue; 494 495 sstr< 64 > buf; 496 buf.Append( "lmap_%i", i ); 497 498 CreateQuickSelect( m_lmapSels[i], MString( buf ) ); 499 } 500 501 for( uint i = 0; i < m_shaderSels.size(); i++ ) 502 { 503 if( !m_shaderSels[i].length() ) 504 continue; 505 506 sstr< 1024 > buf; 507 buf.Append( "shader_" ); 508 MangleShaderName( buf, shaders[i].shader ); 509 510 CreateQuickSelect( m_shaderSels[i], MString( buf ) ); 511 } 512 } 513 514 void BspImporter::CreateQuickSelect( const MSelectionList &sel, const MString &name ) 515 { 516 MStatus stat; 517 518 MFnSet fnSet; 519 fnSet.create( sel, MFnSet::kNone, false, &stat ); 520 check_status( stat ); 521 522 fnSet.setName( name, &stat ); 523 check_status( stat ); 524 } 525 526 void BspImporter::GroupMeshNodes( const MObject &parentXform ) 527 { 528 /* 529 MStatus stat; 530 531 MFnDagNode fnParent( parentXform, &stat ); 532 check_status( stat ); 533 534 for( uint i = 0; i < m_meshPaths.length(); i++ ) 535 { 536 MObject obj = m_meshPaths[i].node(); 537 fnParent.addChild( obj ); 538 } 539 */ 540 } 541 542 void BspImporter::Import( std::istream &stm, const MObject &parentXform ) 543 { 544 size_t base_pos = stm.tellg(); 545 546 BinaryReader in( stm ); 547 548 in >> m_fileHeader; 549 for( int i = 0; i < q3::HEADER_LUMPS; i++ ) 550 m_fileHeader.lumps[i].fileofs += base_pos; 551 552 m_fileData = ∈ 553 554 ImportSurfaces(); 555 CreateShaderQuickSelects(); 556 } 557 460 558 class ImportBSP : public MPxFileTranslator 461 559 { … … 490 588 491 589 std::ifstream file; 492 file.open( filename. fullName().asChar(), std::ios::in | std::ios::binary );590 file.open( filename.resolvedFullName().asChar(), std::ios::in | std::ios::binary ); 493 591 494 592 try 495 593 { 594 MStatus stat; 595 MFnTransform xform; 596 MObject xformObj = xform.create( MObject::kNullObj, &stat ); 597 check_status( stat ); 598 599 filename.name(); 600 xform.setName( MString( "bsp_" ) + filename.resolvedName(), &stat ); 601 check_status( stat ); 602 603 const double scale[] = { 0.01, 0.01, 0.01 }; 604 stat = xform.setScale( scale ); 605 check_status( stat ); 606 496 607 BspImporter imp; 497 imp.Import( file );608 imp.Import( file, xformObj ); 498 609 } 499 610 catch( std::exception &ex ) trunk/maya2q3/maya_entry.cpp
r540 r543 26 26 27 27 static const char *g_vendor = "HermitWorks"; 28 static const char *g_version = "3.3. 1";28 static const char *g_version = "3.3.2"; 29 29 static const char *g_reqVer = "Any"; 30 30
