本文整理汇总了C++中Ptr::AddJoint方法的典型用法代码示例。如果您正苦于以下问题:C++ Ptr::AddJoint方法的具体用法?C++ Ptr::AddJoint怎么用?C++ Ptr::AddJoint使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Ptr
的用法示例。
在下文中一共展示了Ptr::AddJoint方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
//--------------------------------------------------------------------
Ptr<CharacterNode> Nebula3Writer::writeCharacterData( const NodeData& instanceNodeData,CharacterData& characterData )
{
if( !this->mGeometryDatas.Contains(characterData.geometryUniqueId) ||
!this->mSkinDatas.Contains(characterData.skinUniqueId) )
{
n_error("CharacterData Not have geometryData or SkinData!\n");
}
GeometryData& geometryData = this->mGeometryDatas[characterData.geometryUniqueId];
SkinData& skinData = this->mSkinDatas[characterData.skinUniqueId];
/// 设置骨架基本信息
characterData.RootTransform = instanceNodeData.bind_matrix;
characterData.characterName = instanceNodeData.nodeName;
/// 建立骨骼
this->buildSkeleton(characterData,skinData);
this->buildSkinWeights(characterData,skinData,geometryData);
/// 建立骨骼节点
Ptr<CharacterNode> characterNode = CharacterNode::Create();
characterNode->SetName(characterData.characterName);
/// 为骨骼节点添加骨骼
Util::Array<IndexT> boneIndices;
const JointMaps& characterJoints = characterData.characterJoints;
const Util::Array<COLLADAFW::UniqueId>& jointKeys = characterJoints.KeysAsArray();
for (int i=0;i<jointKeys.Size();i++)
{
const COLLADAFW::UniqueId& jointId = jointKeys[i];
characterNode->AddJoint( jointId,characterJoints[jointId] );
//if( characterData.inverseMatrixs.Contains(jointId))
boneIndices.Append( characterJoints[jointId].GetJointIndex());
}///end for
/// 为骨骼节点添加蒙皮信息
Ptr<TransformNode> transformNode = this->writeSkinGeometryData(instanceNodeData,skinData,geometryData);
Util::Array<Ptr<ModelNode>> shapeNodes = transformNode->GetChildren();
for (int i=0;i< shapeNodes.Size();i++)
{
const Ptr<CharacterSkinNode>& skinNode = shapeNodes[i].downcast<CharacterSkinNode>();
IndexT groupIndex = skinNode->GetPrimitiveGroupIndex();
skinNode->AddFragment(groupIndex,boneIndices);
}///end for
Util::String animResId = this->writeAnimationData(characterData,characterJoints);
characterNode->SetAnimationResourceId(animResId);
characterNode->AddChild(transformNode.upcast<ModelNode>());
characterNode->AddSkin(transformNode->GetName().AsString());
//Math::vector outTranslate;Math::quaternion outRotate;Math::vector outScale;
//Math::matrix44 matTemp = characterData.RootTransform;
//matTemp.decompose(outScale,outRotate,outTranslate);
//characterNode->SetPosition(outTranslate);
//characterNode->SetRotation(outRotate);
//characterNode->SetScale(outScale);
return characterNode;
}