FBX Export: handle newly-added geometric transform inverse nodes.
This also tidies up the imported node structure a little, by not adding the inverse nodes if there are no child nodes.pull/1804/head
parent
5e4b2b898f
commit
b91976eead
|
@ -215,24 +215,30 @@ void Converter::ConvertNodes( uint64_t id, aiNode& parent, const aiMatrix4x4& pa
|
||||||
// attach geometry
|
// attach geometry
|
||||||
ConvertModel( *model, *nodes_chain.back(), new_abs_transform );
|
ConvertModel( *model, *nodes_chain.back(), new_abs_transform );
|
||||||
|
|
||||||
// now link the geometric transform inverse nodes,
|
// check if there will be any child nodes
|
||||||
|
const std::vector<const Connection*>& child_conns
|
||||||
|
= doc.GetConnectionsByDestinationSequenced( model->ID(), "Model" );
|
||||||
|
|
||||||
|
// if so, link the geometric transform inverse nodes
|
||||||
// before we attach any child nodes
|
// before we attach any child nodes
|
||||||
for( aiNode* postnode : post_nodes_chain ) {
|
if (child_conns.size()) {
|
||||||
ai_assert( postnode );
|
for( aiNode* postnode : post_nodes_chain ) {
|
||||||
|
ai_assert( postnode );
|
||||||
|
|
||||||
if ( last_parent != &parent ) {
|
if ( last_parent != &parent ) {
|
||||||
last_parent->mNumChildren = 1;
|
last_parent->mNumChildren = 1;
|
||||||
last_parent->mChildren = new aiNode*[ 1 ];
|
last_parent->mChildren = new aiNode*[ 1 ];
|
||||||
last_parent->mChildren[ 0 ] = postnode;
|
last_parent->mChildren[ 0 ] = postnode;
|
||||||
|
}
|
||||||
|
|
||||||
|
postnode->mParent = last_parent;
|
||||||
|
last_parent = postnode;
|
||||||
|
|
||||||
|
new_abs_transform *= postnode->mTransformation;
|
||||||
}
|
}
|
||||||
|
|
||||||
postnode->mParent = last_parent;
|
|
||||||
last_parent = postnode;
|
|
||||||
|
|
||||||
new_abs_transform *= postnode->mTransformation;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// attach sub-nodes
|
// attach sub-nodes (if any)
|
||||||
ConvertNodes( model->ID(), *last_parent, new_abs_transform );
|
ConvertNodes( model->ID(), *last_parent, new_abs_transform );
|
||||||
|
|
||||||
if ( doc.Settings().readLights ) {
|
if ( doc.Settings().readLights ) {
|
||||||
|
|
|
@ -1775,7 +1775,10 @@ const std::map<std::string,std::pair<std::string,char>> transform_types = {
|
||||||
{"ScalingPivotInverse", {"ScalingPivotInverse", 'i'}},
|
{"ScalingPivotInverse", {"ScalingPivotInverse", 'i'}},
|
||||||
{"GeometricScaling", {"GeometricScaling", 's'}},
|
{"GeometricScaling", {"GeometricScaling", 's'}},
|
||||||
{"GeometricRotation", {"GeometricRotation", 'r'}},
|
{"GeometricRotation", {"GeometricRotation", 'r'}},
|
||||||
{"GeometricTranslation", {"GeometricTranslation", 't'}}
|
{"GeometricTranslation", {"GeometricTranslation", 't'}},
|
||||||
|
{"GeometricTranslationInverse", {"GeometricTranslationInverse", 'i'}},
|
||||||
|
{"GeometricRotationInverse", {"GeometricRotationInverse", 'i'}},
|
||||||
|
{"GeometricScalingInverse", {"GeometricScalingInverse", 'i'}}
|
||||||
};
|
};
|
||||||
|
|
||||||
// write a single model node to the stream
|
// write a single model node to the stream
|
||||||
|
|
Loading…
Reference in New Issue