Example #1
0
    // Update is called once per frame
    void Update()
    {
        int jointCount = animationObjectHierData.ObjectHierarchy.Count;

        currentKeyFrame++;
        if (currentKeyFrame > maxFrame)
        {
            currentKeyFrame = 0;
        }

        blendPoseData poseDataResult = blendTreeData.useBlendTree(blendTreeData, currentKeyFrame);

        for (int i = 0; i < jointCount; i++)
        {
            ForwardKinematics.setData(animationObjectHierData, animData, poseDataResult.getPoseData(i), i);
        }
    }
Example #2
0
    public virtual blendPoseData blendOperation(BlendingTree parentTree, int currentFrameID)
    {
        blendPoseData firstPose  = new blendPoseData();
        blendPoseData secondPose = new blendPoseData();
        int           length     = 0;

        switch (nodeType)
        {
        case blendType.BLEND_LERP:
            firstPose  = parentTree.getIndexedNode(nextID1).blendOperation(parentTree, currentFrameID);
            secondPose = parentTree.getIndexedNode(nextID2).blendOperation(parentTree, currentFrameID);

            length = firstPose.size;

            for (int i = 0; i < length; i++)
            {
                animationTransformData transformData;

                transformData = blendStatic.lerp(firstPose.getPoseData(i), secondPose.getPoseData(i), parameter1, true);
                firstPose.setPoseData(transformData, i);
            }
            return(firstPose);

        case blendType.BLEND_ADD:
            firstPose  = parentTree.getIndexedNode(nextID1).blendOperation(parentTree, currentFrameID);
            secondPose = parentTree.getIndexedNode(nextID2).blendOperation(parentTree, currentFrameID);

            length = firstPose.size;

            for (int i = 0; i < length; i++)
            {
                animationTransformData transformData;

                transformData = blendStatic.add(firstPose.getPoseData(i), secondPose.getPoseData(i), true);
                firstPose.setPoseData(transformData, i);
            }
            return(firstPose);

        case blendType.BLEND_SCALE:
            firstPose = parentTree.getIndexedNode(nextID1).blendOperation(parentTree, currentFrameID);

            length = firstPose.size;

            for (int i = 0; i < length; i++)
            {
                animationTransformData transformData = firstPose.getPoseData(i);
                identity newIdentity = new identity();
                transformData = blendStatic.scale(newIdentity, transformData, parameter1, true);
                firstPose.setPoseData(transformData, i);
            }
            return(firstPose);

        case blendType.BLEND_AVG:
            firstPose  = parentTree.getIndexedNode(nextID1).blendOperation(parentTree, currentFrameID);
            secondPose = parentTree.getIndexedNode(nextID2).blendOperation(parentTree, currentFrameID);
            length     = firstPose.size;

            for (int i = 0; i < length; i++)
            {
                animationTransformData transformData;
                identity nIdentity = new identity();

                transformData = blendStatic.average(nIdentity, firstPose.getPoseData(i), secondPose.getPoseData(i), parameter1, parameter2, true);
                firstPose.setPoseData(transformData, i);
            }
            return(firstPose);

        case blendType.BLEND_END:
            blendPoseData newPoseData = new blendPoseData();
            newPoseData.setData(clip, currentFrameID);
            return(newPoseData);

        default:
            return(firstPose);
        }
    }