概要 
- SecondLife/OpenSim の内部用の最適化(バイナリ化)された BVH データ
- see llkeyframemotion.cpp LLKeyframeMotion::deserialize(LLDataPacker& dp)
Data Format 
01 00 "version" (U16) 00 00 "sub_version" (U16) 04 00 00 00 "base_priority", Priority (S32, int) [mJointMotionList->mBasePriority] b4 54 75 40 "duration", Length (F32, float) [mJointMotionList->mDuration] 00 "emote_name", Expression Name (string) [mJointMotionList->mEmoteName] 00 00 00 00 "loop_in_point", In Point (F32) [mJointMotionList->mLoopInPoint] b4 54 75 40 "loop_out_point", Out Point (F32) [mJointMotionList->mLoopOutPoint] 01 00 00 00 "loop", Loop (S32) [mJointMotionList->mLoop] 00 00 00 3f "ease_in_duration", Ease in Time (F32 [mJointMotionList->mEaseInDuration] 33 33 33 3f "ease_out_duration", Ease out Time (F32) [mJointMotionList->mEaseOutDuration] 03 00 00 00 "hand_pose", Hand Pose (U32, unsigned int) [mJointMotionList->mHandPose] 12 00 00 00 "num_joints", Joint Count (U32) [Jointデータの数] // Joint Data 6d 50 65 6c 76 69 73 00 "joint_name", Joint Name (mPelvis) (string) [joint_motion->mJointName] 04 00 00 00 "joint_priority", Priority Revisited (S32) [joint_motion->mPriority] 24 00 00 00 "num_rot_keys", Number of Rotation Keyframes (int) [Rotationデータの数] [joint_motion->mRotationCurve.mNumKeys] // Rotation Keyframe data blocks 73 04 "time", Time Code (U16->F32に変換, old_versionでは元々F32) In Point~Out Point にスケーリングし直し 35 7b "rot_angle_x", X (U16) [rCurve->mKeys[time]] be 6a "rot_angle_y", Y (U16) 1f 52 "rot_angle_z", Z (U16) e7 08 "time", Time Code (U16->F32に変換, old_versionでは元々F32) 38 6f "rot_angle_x", X (U16) e8 b9 "rot_angle_y", Y (U16) 5d 77 "rot_angle_z", Z (U16) ......................... 56 00 00 00 "num_pos_keys", Number of Position Keyframes (S32) [Positionデータの数] [joint_motion->mPositionCurve.mNumKeys] // Position Keyframe data blocks 73 04 "time", Time Code (U16->F32に変換, old_versionでは元々F32) In Point~Out Point にスケーリングし直し ff 7f "pos_x", X (U16) [pCurve->mKeys[pos_key.mTime]] ff 7f "pos_y", Y (U16) ca 7d "pos_z", Z (U16) e7 08 "time", Time Code (U16->F32に変換, old_versionでは元々F32) ff 7f "pos_x", X (U16) ff 7f "pos_y", Y (U16) bb 7d "pos_z", Z (U16) ......................... "num_constraints" (S32) "chain_length" (U8) [constraintp->mChainLength] "constraint_type" (U8) [constraintp->mConstraintType] "source_volume" (Binary 16bit, char*に変換) [constraintp->mSourceConstraintVolume] "source_offset" (Vector3) [constraintp->mSourceConstraintOffset] "target_volume" (Binary 16bit, char*に変換) [constraintp->mTargetConstraintVolume] "target_offset" (Vector3) [onstraintp->mTargetConstraintOffset] "target_dir" (Vector3) [constraintp->mTargetConstraintDir] "ease_in_start" (F32) [constraintp->mEaseInStartTime] "ease_in_stop" (F32) [constraintp->mEaseInStopTime] "ease_out_start" (F32) [constraintp->mEaseOutStartTime] "ease_out_stop" (F32) [constraintp->mEaseOutStopTime] // Next Joint Data .........................
Code 
- mJointMotionList, joint_motion, joint_state
- JointMotion* joint_motion = mJointMotionList->getJointMotion(i);
- mJointMotionList->mConstraints.push_front(JointConstraintSharedData);
//------------------------------------------------------------------------- // JointMotionList //------------------------------------------------------------------------- class JointMotionList { public: std::vector<JointMotion*> mJointMotionArray; F32 mDuration; BOOL mLoop; F32 mLoopInPoint; F32 mLoopOutPoint; F32 mEaseInDuration; F32 mEaseOutDuration; LLJoint::JointPriority mBasePriority; LLHandMotion::eHandPose mHandPose; LLJoint::JointPriority mMaxPriority; typedef std::list<JointConstraintSharedData*> constraint_list_t; constraint_list_t mConstraints; LLBBoxLocal mPelvisBBox; // mEmoteName is a facial motion, but it's necessary to appear here so that it's cached. // TODO: LLKeyframeDataCache::getKeyframeData should probably return a class containing // JointMotionList and mEmoteName, see LLKeyframeMotion::onInitialize. std::string mEmoteName; public: JointMotionList(); ~JointMotionList(); U32 dumpDiagInfo(); JointMotion* getJointMotion(U32 index) const { llassert(index < mJointMotionArray.size()); return mJointMotionArray[index]; } U32 getNumJointMotions() const { return mJointMotionArray.size(); } };
Counter: 1719,
today: 1,
yesterday: 0
最終更新: 2011-11-21 (月) 23:54:03 (JST) (4899d) by iseki