diff --git a/Doxyfile b/Doxyfile index de7558c0a1db1df197532ff0c23c5b242f609f16..d70e69e30e61f1a80899a4336208e6c8857f1b75 100644 --- a/Doxyfile +++ b/Doxyfile @@ -4,7 +4,7 @@ # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = Niflib -PROJECT_NUMBER = 0.5.6 +PROJECT_NUMBER = 0.5.8 OUTPUT_DIRECTORY = doc CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English diff --git a/Niflib for Python ReadMe.txt b/Niflib for Python ReadMe.txt index 70b418617cd88d8c64515ad249d25b283b8b73f5..a4be7fb0ed7b65aecd720b564e0a44cb4f5de2ed 100644 --- a/Niflib for Python ReadMe.txt +++ b/Niflib for Python ReadMe.txt @@ -2,9 +2,11 @@ Python SWIG wrapper for Niflib To use: Unzip the files to your Python folder (Probably C:\Python24). -Due to the many API changes in this version of Niflib, the module is called "new_niflib" to -give people using the existing Niflib for Python the ability to use both versions at the same time. -The next major release will return to the name "niflib." +Due to many API changes in Niflib 0.5, the module is called "new_niflib" to give +people using the older versions of Niflib for Python the ability to use both +versions at the same time. + +A future release will return to using 'niflib.' From within Python: diff --git a/include/gen/TexDesc.h b/include/gen/TexDesc.h index d45eb52771d5825871b9e9bacf042dfa5bd53bd7..61ae63400bbd71176971b3e2e75688a5ecc94794 100644 --- a/include/gen/TexDesc.h +++ b/include/gen/TexDesc.h @@ -34,9 +34,10 @@ struct NIFLIB_API TexDesc { */ TexFilterMode filterMode; /*! - * Texture set? Usually 0. + * The texture coordinate set in NiTriBasedGeomData that this texture + * slot will use. */ - uint textureSet; + uint uvSet; /*! * 0? */ diff --git a/src/ComplexShape.cpp b/src/ComplexShape.cpp index 439bbbbb993782a5cc6db922f6fa647d684e2fa7..67669939fb8ea34de8065b883c265ac973f1e11f 100644 --- a/src/ComplexShape.cpp +++ b/src/ComplexShape.cpp @@ -331,87 +331,88 @@ void ComplexShape::Merge( const Ref<NiAVObject> & root ) { //Texture Coordinates //Create UV set list - vector<TexType> uvSetList; + vector<TexType> uvSetList( shapeUVs.size() ); + //Initialize to base + for ( unsigned tex = 0; tex < uvSetList.size(); ++tex ) { + uvSetList[tex] = BASE_MAP; + } NiPropertyRef niProp = (*geom)->GetPropertyByType( NiTexturingProperty::TypeConst() ); NiTexturingPropertyRef niTexProp; if ( niProp != NULL ) { niTexProp = DynamicCast<NiTexturingProperty>(niProp); } + if ( niTexProp != NULL ) { + //Add the UV set to the list for every type of texture slot that uses it for ( int tex = 0; tex < 8; ++tex ) { if ( niTexProp->HasTexture(tex) == true ) { - ////cout << "Adding texture type to list: " << TexType(tex) << endl; - uvSetList.push_back( TexType(tex) ); - } - } - } - - for ( unsigned set = 0; set < shapeUVs.size(); ++set ) { - TexType newType = BASE_MAP; - if ( uvSetList.size() > set ) { - newType = uvSetList[set]; - } + TexDesc td = niTexProp->GetTexture(tex); + + unsigned set = td.uvSet; + TexType newType = TexType(tex); + + //Search for matching UV set + bool match_found = false; + unsigned uvSetIndex; + for ( unsigned set_index = 0; set_index < texCoordSets.size(); ++set_index ) { + if ( texCoordSets[set_index].texType == newType ) { + ////cout << "Match found, use existing texture set index" << endl; + //Match found, use existing index + uvSetIndex = set_index; + match_found = true; + //Stop searching + break; + } + } - //Search for matching UV set - bool match_found = false; - unsigned uvSetIndex; - for ( unsigned set_index = 0; set_index < texCoordSets.size(); ++set_index ) { - if ( texCoordSets[set_index].texType == newType ) { - ////cout << "Match found, use existing texture set index" << endl; - //Match found, use existing index - uvSetIndex = set_index; - match_found = true; - //Stop searching - break; - } - } + if ( match_found == false ) { + ////cout << "No match found, add this texture set to the list" << endl; + //No match found, add this UV set to the list + TexCoordSet newTCS; + newTCS.texType = newType; + texCoordSets.push_back( newTCS ); + //Record new index + uvSetIndex = unsigned(texCoordSets.size()) - 1; + } - if ( match_found == false ) { - ////cout << "No match found, add this texture set to the list" << endl; - //No match found, add this UV set to the list - TexCoordSet newTCS; - newTCS.texType = newType; - texCoordSets.push_back( newTCS ); - //Record new index - uvSetIndex = unsigned(texCoordSets.size()) - 1; - } + ////cout << "Loop through texture cooridnates in this set" << endl; + for ( unsigned v = 0; v < shapeUVs[set].size(); ++v ) { + TexCoord newCoord; + + newCoord = shapeUVs[set][v]; + + //cout << "Search for matching texture coordinate" << endl; + //cout << "uvSetIndex: " << uvSetIndex << endl; + //cout << "set: " << set << endl; + //cout << "texCoordSets.size(): " << unsigned(texCoordSets.size()) << endl; + //cout << "v: " << v << endl; + //cout << "lookUp.size(): " << unsigned(lookUp.size()) << endl; + //cout << "texCoordSets[uvSetIndex].texCoords.size(): " << unsigned(texCoordSets[uvSetIndex].texCoords.size()) << endl; + //Search for matching texture cooridnate + bool match_found = false; + for ( unsigned tc_index = 0; tc_index < texCoordSets[uvSetIndex].texCoords.size(); ++tc_index ) { + if ( texCoordSets[uvSetIndex].texCoords[tc_index] == newCoord ) { + ////cout << " Match found, using existing index" << endl;; + //Match found, use existing index + lookUp[v].uvIndices[uvSetIndex] = tc_index; + match_found = true; + ////cout << "Stop searching" << endl; + //Stop searching + break; + } + } - ////cout << "Loop through texture cooridnates in this set" << endl; - for ( unsigned v = 0; v < shapeUVs[set].size(); ++v ) { - TexCoord newCoord; - - newCoord = shapeUVs[set][v]; - - //cout << "Search for matching texture coordinate" << endl; - //cout << "uvSetIndex: " << uvSetIndex << endl; - //cout << "set: " << set << endl; - //cout << "texCoordSets.size(): " << unsigned(texCoordSets.size()) << endl; - //cout << "v: " << v << endl; - //cout << "lookUp.size(): " << unsigned(lookUp.size()) << endl; - //cout << "texCoordSets[uvSetIndex].texCoords.size(): " << unsigned(texCoordSets[uvSetIndex].texCoords.size()) << endl; - //Search for matching texture cooridnate - bool match_found = false; - for ( unsigned tc_index = 0; tc_index < texCoordSets[uvSetIndex].texCoords.size(); ++tc_index ) { - if ( texCoordSets[uvSetIndex].texCoords[tc_index] == newCoord ) { - ////cout << " Match found, using existing index" << endl;; - //Match found, use existing index - lookUp[v].uvIndices[uvSetIndex] = tc_index; - match_found = true; - ////cout << "Stop searching" << endl; - //Stop searching - break; + ////cout << "Done with loop, check if match was found" << endl; + if ( match_found == false ) { + ////cout << "No match found" << endl; + //No match found, add this texture coordinate to the list + texCoordSets[uvSetIndex].texCoords.push_back( newCoord ); + ////cout << "Record new index" << endl; + //Record new index + lookUp[v].uvIndices[uvSetIndex] = unsigned(texCoordSets[uvSetIndex].texCoords.size()) - 1; + } } } - - ////cout << "Done with loop, check if match was found" << endl; - if ( match_found == false ) { - ////cout << "No match found" << endl; - //No match found, add this texture coordinate to the list - texCoordSets[uvSetIndex].texCoords.push_back( newCoord ); - ////cout << "Record new index" << endl; - //Record new index - lookUp[v].uvIndices[uvSetIndex] = unsigned(texCoordSets[uvSetIndex].texCoords.size()) - 1; - } } } @@ -791,6 +792,9 @@ Ref<NiAVObject> ComplexShape::Split( Ref<NiNode> & parent, Matrix44 & transform, for ( int tex_num = 0; tex_num < 8; ++tex_num ) { if (niTexProp->HasTexture(tex_num)) { shapeTexCoordSets.push_back(tex_num); + TexDesc td = niTexProp->GetTexture(tex_num); + td.uvSet = shapeTexCoordSets.size() - 1; + niTexProp->SetTexture(tex_num, td); } } } else { diff --git a/src/gen/TexDesc.cpp b/src/gen/TexDesc.cpp index ae265b3bd9357725887922ac51ed6a5d0d7723e3..4aac8d5b9bdf08a609af40678d6d4ccdce22f40d 100644 --- a/src/gen/TexDesc.cpp +++ b/src/gen/TexDesc.cpp @@ -6,7 +6,7 @@ All rights reserved. Please see niflib.h for licence. */ using namespace Niflib; //Constructor -TexDesc::TexDesc() : source(NULL), clampMode((TexClampMode)WRAP_S_WRAP_T), filterMode((TexFilterMode)FILTER_TRILERP), textureSet((uint)0), ps2L((ushort)0), ps2K((ushort)0xFFB5), unknown1((ushort)0), hasTextureTransform(false), wRotation(0.0f), transformType_((uint)0) {}; +TexDesc::TexDesc() : source(NULL), clampMode((TexClampMode)WRAP_S_WRAP_T), filterMode((TexFilterMode)FILTER_TRILERP), uvSet((uint)0), ps2L((ushort)0), ps2K((ushort)0xFFB5), unknown1((ushort)0), hasTextureTransform(false), wRotation(0.0f), transformType_((uint)0) {}; //Destructor TexDesc::~TexDesc() {}; diff --git a/src/gen/obj_impl.cpp b/src/gen/obj_impl.cpp index c1cead69ef62b6bfc88eddf5ce79443a49cd5325..17bdca5e26e33bc8325cfa9f58bc80de16a33362 100644 --- a/src/gen/obj_impl.cpp +++ b/src/gen/obj_impl.cpp @@ -10681,7 +10681,7 @@ void NiTexturingProperty::InternalRead( istream& in, list<uint> & link_stack, un link_stack.push_back( block_num ); NifStream( baseTexture.clampMode, in, version ); NifStream( baseTexture.filterMode, in, version ); - NifStream( baseTexture.textureSet, in, version ); + NifStream( baseTexture.uvSet, in, version ); if ( version <= 0x0A020000 ) { NifStream( baseTexture.ps2L, in, version ); NifStream( baseTexture.ps2K, in, version ); @@ -10706,7 +10706,7 @@ void NiTexturingProperty::InternalRead( istream& in, list<uint> & link_stack, un link_stack.push_back( block_num ); NifStream( darkTexture.clampMode, in, version ); NifStream( darkTexture.filterMode, in, version ); - NifStream( darkTexture.textureSet, in, version ); + NifStream( darkTexture.uvSet, in, version ); if ( version <= 0x0A020000 ) { NifStream( darkTexture.ps2L, in, version ); NifStream( darkTexture.ps2K, in, version ); @@ -10731,7 +10731,7 @@ void NiTexturingProperty::InternalRead( istream& in, list<uint> & link_stack, un link_stack.push_back( block_num ); NifStream( detailTexture.clampMode, in, version ); NifStream( detailTexture.filterMode, in, version ); - NifStream( detailTexture.textureSet, in, version ); + NifStream( detailTexture.uvSet, in, version ); if ( version <= 0x0A020000 ) { NifStream( detailTexture.ps2L, in, version ); NifStream( detailTexture.ps2K, in, version ); @@ -10756,7 +10756,7 @@ void NiTexturingProperty::InternalRead( istream& in, list<uint> & link_stack, un link_stack.push_back( block_num ); NifStream( glossTexture.clampMode, in, version ); NifStream( glossTexture.filterMode, in, version ); - NifStream( glossTexture.textureSet, in, version ); + NifStream( glossTexture.uvSet, in, version ); if ( version <= 0x0A020000 ) { NifStream( glossTexture.ps2L, in, version ); NifStream( glossTexture.ps2K, in, version ); @@ -10781,7 +10781,7 @@ void NiTexturingProperty::InternalRead( istream& in, list<uint> & link_stack, un link_stack.push_back( block_num ); NifStream( glowTexture.clampMode, in, version ); NifStream( glowTexture.filterMode, in, version ); - NifStream( glowTexture.textureSet, in, version ); + NifStream( glowTexture.uvSet, in, version ); if ( version <= 0x0A020000 ) { NifStream( glowTexture.ps2L, in, version ); NifStream( glowTexture.ps2K, in, version ); @@ -10806,7 +10806,7 @@ void NiTexturingProperty::InternalRead( istream& in, list<uint> & link_stack, un link_stack.push_back( block_num ); NifStream( bumpMapTexture.clampMode, in, version ); NifStream( bumpMapTexture.filterMode, in, version ); - NifStream( bumpMapTexture.textureSet, in, version ); + NifStream( bumpMapTexture.uvSet, in, version ); if ( version <= 0x0A020000 ) { NifStream( bumpMapTexture.ps2L, in, version ); NifStream( bumpMapTexture.ps2K, in, version ); @@ -10834,7 +10834,7 @@ void NiTexturingProperty::InternalRead( istream& in, list<uint> & link_stack, un link_stack.push_back( block_num ); NifStream( decal0Texture.clampMode, in, version ); NifStream( decal0Texture.filterMode, in, version ); - NifStream( decal0Texture.textureSet, in, version ); + NifStream( decal0Texture.uvSet, in, version ); if ( version <= 0x0A020000 ) { NifStream( decal0Texture.ps2L, in, version ); NifStream( decal0Texture.ps2K, in, version ); @@ -10861,7 +10861,7 @@ void NiTexturingProperty::InternalRead( istream& in, list<uint> & link_stack, un link_stack.push_back( block_num ); NifStream( decal1Texture.clampMode, in, version ); NifStream( decal1Texture.filterMode, in, version ); - NifStream( decal1Texture.textureSet, in, version ); + NifStream( decal1Texture.uvSet, in, version ); if ( version <= 0x0A020000 ) { NifStream( decal1Texture.ps2L, in, version ); NifStream( decal1Texture.ps2K, in, version ); @@ -10890,7 +10890,7 @@ void NiTexturingProperty::InternalRead( istream& in, list<uint> & link_stack, un link_stack.push_back( block_num ); NifStream( shaderTextures[i2].textureData.clampMode, in, version ); NifStream( shaderTextures[i2].textureData.filterMode, in, version ); - NifStream( shaderTextures[i2].textureData.textureSet, in, version ); + NifStream( shaderTextures[i2].textureData.uvSet, in, version ); if ( version <= 0x0A020000 ) { NifStream( shaderTextures[i2].textureData.ps2L, in, version ); NifStream( shaderTextures[i2].textureData.ps2K, in, version ); @@ -10930,7 +10930,7 @@ void NiTexturingProperty::InternalWrite( ostream& out, map<NiObjectRef,uint> lin NifStream( 0xffffffff, out, version ); NifStream( baseTexture.clampMode, out, version ); NifStream( baseTexture.filterMode, out, version ); - NifStream( baseTexture.textureSet, out, version ); + NifStream( baseTexture.uvSet, out, version ); if ( version <= 0x0A020000 ) { NifStream( baseTexture.ps2L, out, version ); NifStream( baseTexture.ps2K, out, version ); @@ -10957,7 +10957,7 @@ void NiTexturingProperty::InternalWrite( ostream& out, map<NiObjectRef,uint> lin NifStream( 0xffffffff, out, version ); NifStream( darkTexture.clampMode, out, version ); NifStream( darkTexture.filterMode, out, version ); - NifStream( darkTexture.textureSet, out, version ); + NifStream( darkTexture.uvSet, out, version ); if ( version <= 0x0A020000 ) { NifStream( darkTexture.ps2L, out, version ); NifStream( darkTexture.ps2K, out, version ); @@ -10984,7 +10984,7 @@ void NiTexturingProperty::InternalWrite( ostream& out, map<NiObjectRef,uint> lin NifStream( 0xffffffff, out, version ); NifStream( detailTexture.clampMode, out, version ); NifStream( detailTexture.filterMode, out, version ); - NifStream( detailTexture.textureSet, out, version ); + NifStream( detailTexture.uvSet, out, version ); if ( version <= 0x0A020000 ) { NifStream( detailTexture.ps2L, out, version ); NifStream( detailTexture.ps2K, out, version ); @@ -11011,7 +11011,7 @@ void NiTexturingProperty::InternalWrite( ostream& out, map<NiObjectRef,uint> lin NifStream( 0xffffffff, out, version ); NifStream( glossTexture.clampMode, out, version ); NifStream( glossTexture.filterMode, out, version ); - NifStream( glossTexture.textureSet, out, version ); + NifStream( glossTexture.uvSet, out, version ); if ( version <= 0x0A020000 ) { NifStream( glossTexture.ps2L, out, version ); NifStream( glossTexture.ps2K, out, version ); @@ -11038,7 +11038,7 @@ void NiTexturingProperty::InternalWrite( ostream& out, map<NiObjectRef,uint> lin NifStream( 0xffffffff, out, version ); NifStream( glowTexture.clampMode, out, version ); NifStream( glowTexture.filterMode, out, version ); - NifStream( glowTexture.textureSet, out, version ); + NifStream( glowTexture.uvSet, out, version ); if ( version <= 0x0A020000 ) { NifStream( glowTexture.ps2L, out, version ); NifStream( glowTexture.ps2K, out, version ); @@ -11065,7 +11065,7 @@ void NiTexturingProperty::InternalWrite( ostream& out, map<NiObjectRef,uint> lin NifStream( 0xffffffff, out, version ); NifStream( bumpMapTexture.clampMode, out, version ); NifStream( bumpMapTexture.filterMode, out, version ); - NifStream( bumpMapTexture.textureSet, out, version ); + NifStream( bumpMapTexture.uvSet, out, version ); if ( version <= 0x0A020000 ) { NifStream( bumpMapTexture.ps2L, out, version ); NifStream( bumpMapTexture.ps2K, out, version ); @@ -11095,7 +11095,7 @@ void NiTexturingProperty::InternalWrite( ostream& out, map<NiObjectRef,uint> lin NifStream( 0xffffffff, out, version ); NifStream( decal0Texture.clampMode, out, version ); NifStream( decal0Texture.filterMode, out, version ); - NifStream( decal0Texture.textureSet, out, version ); + NifStream( decal0Texture.uvSet, out, version ); if ( version <= 0x0A020000 ) { NifStream( decal0Texture.ps2L, out, version ); NifStream( decal0Texture.ps2K, out, version ); @@ -11124,7 +11124,7 @@ void NiTexturingProperty::InternalWrite( ostream& out, map<NiObjectRef,uint> lin NifStream( 0xffffffff, out, version ); NifStream( decal1Texture.clampMode, out, version ); NifStream( decal1Texture.filterMode, out, version ); - NifStream( decal1Texture.textureSet, out, version ); + NifStream( decal1Texture.uvSet, out, version ); if ( version <= 0x0A020000 ) { NifStream( decal1Texture.ps2L, out, version ); NifStream( decal1Texture.ps2K, out, version ); @@ -11154,7 +11154,7 @@ void NiTexturingProperty::InternalWrite( ostream& out, map<NiObjectRef,uint> lin NifStream( 0xffffffff, out, version ); NifStream( shaderTextures[i2].textureData.clampMode, out, version ); NifStream( shaderTextures[i2].textureData.filterMode, out, version ); - NifStream( shaderTextures[i2].textureData.textureSet, out, version ); + NifStream( shaderTextures[i2].textureData.uvSet, out, version ); if ( version <= 0x0A020000 ) { NifStream( shaderTextures[i2].textureData.ps2L, out, version ); NifStream( shaderTextures[i2].textureData.ps2K, out, version ); @@ -11190,7 +11190,7 @@ std::string NiTexturingProperty::InternalAsString( bool verbose ) const { out << " Source: " << baseTexture.source << endl; out << " Clamp Mode: " << baseTexture.clampMode << endl; out << " Filter Mode: " << baseTexture.filterMode << endl; - out << " Texture Set: " << baseTexture.textureSet << endl; + out << " UV Set: " << baseTexture.uvSet << endl; out << " PS2 L: " << baseTexture.ps2L << endl; out << " PS2 K: " << baseTexture.ps2K << endl; out << " Unknown1: " << baseTexture.unknown1 << endl; @@ -11208,7 +11208,7 @@ std::string NiTexturingProperty::InternalAsString( bool verbose ) const { out << " Source: " << darkTexture.source << endl; out << " Clamp Mode: " << darkTexture.clampMode << endl; out << " Filter Mode: " << darkTexture.filterMode << endl; - out << " Texture Set: " << darkTexture.textureSet << endl; + out << " UV Set: " << darkTexture.uvSet << endl; out << " PS2 L: " << darkTexture.ps2L << endl; out << " PS2 K: " << darkTexture.ps2K << endl; out << " Unknown1: " << darkTexture.unknown1 << endl; @@ -11226,7 +11226,7 @@ std::string NiTexturingProperty::InternalAsString( bool verbose ) const { out << " Source: " << detailTexture.source << endl; out << " Clamp Mode: " << detailTexture.clampMode << endl; out << " Filter Mode: " << detailTexture.filterMode << endl; - out << " Texture Set: " << detailTexture.textureSet << endl; + out << " UV Set: " << detailTexture.uvSet << endl; out << " PS2 L: " << detailTexture.ps2L << endl; out << " PS2 K: " << detailTexture.ps2K << endl; out << " Unknown1: " << detailTexture.unknown1 << endl; @@ -11244,7 +11244,7 @@ std::string NiTexturingProperty::InternalAsString( bool verbose ) const { out << " Source: " << glossTexture.source << endl; out << " Clamp Mode: " << glossTexture.clampMode << endl; out << " Filter Mode: " << glossTexture.filterMode << endl; - out << " Texture Set: " << glossTexture.textureSet << endl; + out << " UV Set: " << glossTexture.uvSet << endl; out << " PS2 L: " << glossTexture.ps2L << endl; out << " PS2 K: " << glossTexture.ps2K << endl; out << " Unknown1: " << glossTexture.unknown1 << endl; @@ -11262,7 +11262,7 @@ std::string NiTexturingProperty::InternalAsString( bool verbose ) const { out << " Source: " << glowTexture.source << endl; out << " Clamp Mode: " << glowTexture.clampMode << endl; out << " Filter Mode: " << glowTexture.filterMode << endl; - out << " Texture Set: " << glowTexture.textureSet << endl; + out << " UV Set: " << glowTexture.uvSet << endl; out << " PS2 L: " << glowTexture.ps2L << endl; out << " PS2 K: " << glowTexture.ps2K << endl; out << " Unknown1: " << glowTexture.unknown1 << endl; @@ -11280,7 +11280,7 @@ std::string NiTexturingProperty::InternalAsString( bool verbose ) const { out << " Source: " << bumpMapTexture.source << endl; out << " Clamp Mode: " << bumpMapTexture.clampMode << endl; out << " Filter Mode: " << bumpMapTexture.filterMode << endl; - out << " Texture Set: " << bumpMapTexture.textureSet << endl; + out << " UV Set: " << bumpMapTexture.uvSet << endl; out << " PS2 L: " << bumpMapTexture.ps2L << endl; out << " PS2 K: " << bumpMapTexture.ps2K << endl; out << " Unknown1: " << bumpMapTexture.unknown1 << endl; @@ -11301,7 +11301,7 @@ std::string NiTexturingProperty::InternalAsString( bool verbose ) const { out << " Source: " << decal0Texture.source << endl; out << " Clamp Mode: " << decal0Texture.clampMode << endl; out << " Filter Mode: " << decal0Texture.filterMode << endl; - out << " Texture Set: " << decal0Texture.textureSet << endl; + out << " UV Set: " << decal0Texture.uvSet << endl; out << " PS2 L: " << decal0Texture.ps2L << endl; out << " PS2 K: " << decal0Texture.ps2K << endl; out << " Unknown1: " << decal0Texture.unknown1 << endl; @@ -11321,7 +11321,7 @@ std::string NiTexturingProperty::InternalAsString( bool verbose ) const { out << " Source: " << decal1Texture.source << endl; out << " Clamp Mode: " << decal1Texture.clampMode << endl; out << " Filter Mode: " << decal1Texture.filterMode << endl; - out << " Texture Set: " << decal1Texture.textureSet << endl; + out << " UV Set: " << decal1Texture.uvSet << endl; out << " PS2 L: " << decal1Texture.ps2L << endl; out << " PS2 K: " << decal1Texture.ps2K << endl; out << " Unknown1: " << decal1Texture.unknown1 << endl; @@ -11341,7 +11341,7 @@ std::string NiTexturingProperty::InternalAsString( bool verbose ) const { out << " Source: " << shaderTextures[i1].textureData.source << endl; out << " Clamp Mode: " << shaderTextures[i1].textureData.clampMode << endl; out << " Filter Mode: " << shaderTextures[i1].textureData.filterMode << endl; - out << " Texture Set: " << shaderTextures[i1].textureData.textureSet << endl; + out << " UV Set: " << shaderTextures[i1].textureData.uvSet << endl; out << " PS2 L: " << shaderTextures[i1].textureData.ps2L << endl; out << " PS2 K: " << shaderTextures[i1].textureData.ps2K << endl; out << " Unknown1: " << shaderTextures[i1].textureData.unknown1 << endl; diff --git a/src/obj/NiTriBasedGeom.cpp b/src/obj/NiTriBasedGeom.cpp index 003956952aa275438c8e20bd6f04f73c4e3a1f6a..26794a9d25375632a9d3171af9b8441a5815459f 100644 --- a/src/obj/NiTriBasedGeom.cpp +++ b/src/obj/NiTriBasedGeom.cpp @@ -254,17 +254,13 @@ vector<Vector3> NiTriBasedGeom::GetSkinInfluencedVertices() const { vector<Vector3> skin_verts( vertices.size()); //Transform vertices into position based on skin data - Matrix44 skel_root_inv = skel_root->GetWorldTransform().Inverse(); + Matrix44 root_world = skel_root->GetWorldTransform(); Matrix44 geom_world = GetWorldTransform(); - Matrix44 overall_offset = skin_data->GetOverallTransform(); - for ( uint i = 0; i < skin_data->GetBoneCount(); ++i ) { Matrix44 bone_world = bone_nodes[i]->GetWorldTransform(); Matrix44 bone_offset = skin_data->GetBoneTransform(i); vector<SkinWeight> weights = skin_data->GetBoneWeights(i); - //Matrix44 vert_trans = bone_offset * skel_root_inv * bone_world * overall_offset * geom_world; - Matrix44 vert_trans = geom_world * bone_world * skel_root_inv * overall_offset * bone_offset; - + Matrix44 vert_trans = bone_offset * bone_world; for ( uint j = 0; j < weights.size(); ++j ) { uint index = weights[j].index; float weight = weights[j].weight;