diff --git a/include/ComplexShape.h b/include/ComplexShape.h index 7358ed0d617e241da7295cb98bfc5f14a9d29886..6e0a5b60b6b4652f59afac1934f363f4f0f9ae3b 100644 --- a/include/ComplexShape.h +++ b/include/ComplexShape.h @@ -182,7 +182,8 @@ public: int max_bones_per_partition = 4, bool stripify = false, bool tangent_space = false, - float min_vertex_weight = 0.001f + float min_vertex_weight = 0.001f, + byte tspace_flags = 0 ) const; /* diff --git a/src/ComplexShape.cpp b/src/ComplexShape.cpp index d0cf2069a0a08a8b66bcc9452e1eb0957294d101..307af656a1fe15a3a26ee4c398c195f1baa2b607 100644 --- a/src/ComplexShape.cpp +++ b/src/ComplexShape.cpp @@ -703,7 +703,7 @@ void ComplexShape::Merge( NiAVObject * root ) { //Done Merging } -Ref<NiAVObject> ComplexShape::Split( NiNode * parent, Matrix44 & transform, int max_bones_per_partition, bool stripify, bool tangent_space, float min_vertex_weight ) const { +Ref<NiAVObject> ComplexShape::Split( NiNode * parent, Matrix44 & transform, int max_bones_per_partition, bool stripify, bool tangent_space, float min_vertex_weight, byte tspace_flags ) const { //Make sure parent is not NULL if ( parent == NULL ) { @@ -1092,7 +1092,15 @@ Ref<NiAVObject> ComplexShape::Split( NiNode * parent, Matrix44 & transform, int //If tangent space was requested, generate it if ( tangent_space ) { - shapes[shape_num]->UpdateTangentSpace(); + if(tspace_flags == 0) { + shapes[shape_num]->UpdateTangentSpace(); + } else { + if(shapes[shape_num]->GetData() != NULL) { + shapes[shape_num]->GetData()->SetUVSetCount(1); + shapes[shape_num]->GetData()->SetTspaceFlag(tspace_flags); + shapes[shape_num]->UpdateTangentSpace(1); + } + } } //Next Shape diff --git a/src/obj/NiGeometryData.cpp b/src/obj/NiGeometryData.cpp index 4ad2f1b1ba4bc926c6b45681bb2b48c93a851826..84b57d5603711ec41fb34aebf58bd5ed44e11229 100644 --- a/src/obj/NiGeometryData.cpp +++ b/src/obj/NiGeometryData.cpp @@ -155,7 +155,7 @@ void NiGeometryData::Write( ostream& out, const map<NiObjectRef,unsigned int> & //--END CUSTOM CODE--// NiObject::Write( out, link_map, missing_link_stack, info ); - bsNumUvSets = (unsigned short)(uvSets.size()); + bsNumUvSets = ((unsigned short)(uvSets.size()) | (bsNumUvSets & 0xFF00)); numUvSets = (unsigned short)(uvSets.size()); numVertices = (unsigned short)(vertices.size()); if ( info.version >= 0x0A020000 ) { @@ -659,12 +659,12 @@ void NiGeometryData::SetBound(Vector3 const & center, float radius) byte NiGeometryData::GetTspaceFlag() const { - return numUvSets | bsNumUvSets; + return (numUvSets | bsNumUvSets) >> 8; } void NiGeometryData::SetTspaceFlag( byte value ) { - numUvSets = value; - bsNumUvSets = value; + numUvSets = ((value << 8) | numUvSets); + bsNumUvSets = ((value << 8) | bsNumUvSets); } bool NiGeometryData::GetHasNormals() const {