Java Code Examples for com.jme3.math.Quaternion#nlerp()
The following examples show how to use
com.jme3.math.Quaternion#nlerp() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: SpatialTrack.java From jmonkeyengine with BSD 3-Clause "New" or "Revised" License | 4 votes |
/** * * Modify the spatial which this track modifies. * * @param time * the current time of the animation */ @Override public void setTime(float time, float weight, AnimControl control, AnimChannel channel, TempVars vars) { Spatial spatial = trackSpatial; if (spatial == null) { spatial = control.getSpatial(); } Vector3f tempV = vars.vect1; Vector3f tempS = vars.vect2; Quaternion tempQ = vars.quat1; Vector3f tempV2 = vars.vect3; Vector3f tempS2 = vars.vect4; Quaternion tempQ2 = vars.quat2; int lastFrame = times.length - 1; if (time < 0 || lastFrame == 0) { if (rotations != null) rotations.get(0, tempQ); if (translations != null) translations.get(0, tempV); if (scales != null) { scales.get(0, tempS); } } else if (time >= times[lastFrame]) { if (rotations != null) rotations.get(lastFrame, tempQ); if (translations != null) translations.get(lastFrame, tempV); if (scales != null) { scales.get(lastFrame, tempS); } } else { int startFrame = 0; int endFrame = 1; // use lastFrame so we never overflow the array for (int i = 0; i < lastFrame && times[i] < time; ++i) { startFrame = i; endFrame = i + 1; } float blend = (time - times[startFrame]) / (times[endFrame] - times[startFrame]); if (rotations != null) rotations.get(startFrame, tempQ); if (translations != null) translations.get(startFrame, tempV); if (scales != null) { scales.get(startFrame, tempS); } if (rotations != null) rotations.get(endFrame, tempQ2); if (translations != null) translations.get(endFrame, tempV2); if (scales != null) { scales.get(endFrame, tempS2); } tempQ.nlerp(tempQ2, blend); tempV.interpolateLocal(tempV2, blend); tempS.interpolateLocal(tempS2, blend); } if (translations != null) { spatial.setLocalTranslation(tempV); } if (rotations != null) { spatial.setLocalRotation(tempQ); } if (scales != null) { spatial.setLocalScale(tempS); } }
Example 2
Source File: BoneTrack.java From jmonkeyengine with BSD 3-Clause "New" or "Revised" License | 4 votes |
/** * * Modify the bone which this track modifies in the skeleton to contain * the correct animation transforms for a given time. * The transforms can be interpolated in some method from the keyframes. * * @param time the current time of the animation * @param weight the weight of the animation * @param control * @param channel * @param vars */ @Override public void setTime(float time, float weight, AnimControl control, AnimChannel channel, TempVars vars) { BitSet affectedBones = channel.getAffectedBones(); if (affectedBones != null && !affectedBones.get(targetBoneIndex)) { return; } Bone target = control.getSkeleton().getBone(targetBoneIndex); Vector3f tempV = vars.vect1; Vector3f tempS = vars.vect2; Quaternion tempQ = vars.quat1; Vector3f tempV2 = vars.vect3; Vector3f tempS2 = vars.vect4; Quaternion tempQ2 = vars.quat2; int lastFrame = times.length - 1; if (time < 0 || lastFrame == 0) { rotations.get(0, tempQ); translations.get(0, tempV); if (scales != null) { scales.get(0, tempS); } } else if (time >= times[lastFrame]) { rotations.get(lastFrame, tempQ); translations.get(lastFrame, tempV); if (scales != null) { scales.get(lastFrame, tempS); } } else { int startFrame = 0; int endFrame = 1; // use lastFrame so we never overflow the array int i; for (i = 0; i < lastFrame && times[i] < time; i++) { startFrame = i; endFrame = i + 1; } float blend = (time - times[startFrame]) / (times[endFrame] - times[startFrame]); rotations.get(startFrame, tempQ); translations.get(startFrame, tempV); if (scales != null) { scales.get(startFrame, tempS); } rotations.get(endFrame, tempQ2); translations.get(endFrame, tempV2); if (scales != null) { scales.get(endFrame, tempS2); } tempQ.nlerp(tempQ2, blend); tempV.interpolateLocal(tempV2, blend); tempS.interpolateLocal(tempS2, blend); } // if (weight != 1f) { target.blendAnimTransforms(tempV, tempQ, scales != null ? tempS : null, weight); // } else { // target.setAnimTransforms(tempV, tempQ, scales != null ? tempS : null); // } }
Example 3
Source File: SpatialTrack.java From MikuMikuStudio with BSD 2-Clause "Simplified" License | 4 votes |
/** * * Modify the spatial which this track modifies. * * @param time * the current time of the animation */ public void setTime(float time, float weight, AnimControl control, AnimChannel channel, TempVars vars) { Spatial spatial = control.getSpatial(); Vector3f tempV = vars.vect1; Vector3f tempS = vars.vect2; Quaternion tempQ = vars.quat1; Vector3f tempV2 = vars.vect3; Vector3f tempS2 = vars.vect4; Quaternion tempQ2 = vars.quat2; int lastFrame = times.length - 1; if (time < 0 || lastFrame == 0) { if (rotations != null) rotations.get(0, tempQ); if (translations != null) translations.get(0, tempV); if (scales != null) { scales.get(0, tempS); } } else if (time >= times[lastFrame]) { if (rotations != null) rotations.get(lastFrame, tempQ); if (translations != null) translations.get(lastFrame, tempV); if (scales != null) { scales.get(lastFrame, tempS); } } else { int startFrame = 0; int endFrame = 1; // use lastFrame so we never overflow the array for (int i = 0; i < lastFrame && times[i] < time; ++i) { startFrame = i; endFrame = i + 1; } float blend = (time - times[startFrame]) / (times[endFrame] - times[startFrame]); if (rotations != null) rotations.get(startFrame, tempQ); if (translations != null) translations.get(startFrame, tempV); if (scales != null) { scales.get(startFrame, tempS); } if (rotations != null) rotations.get(endFrame, tempQ2); if (translations != null) translations.get(endFrame, tempV2); if (scales != null) { scales.get(endFrame, tempS2); } tempQ.nlerp(tempQ2, blend); tempV.interpolate(tempV2, blend); tempS.interpolate(tempS2, blend); } if (translations != null) spatial.setLocalTranslation(tempV); if (rotations != null) spatial.setLocalRotation(tempQ); if (scales != null) { spatial.setLocalScale(tempS); } }
Example 4
Source File: BoneTrack.java From MikuMikuStudio with BSD 2-Clause "Simplified" License | 4 votes |
/** * * Modify the bone which this track modifies in the skeleton to contain * the correct animation transforms for a given time. * The transforms can be interpolated in some method from the keyframes. * * @param time the current time of the animation * @param weight the weight of the animation * @param control * @param channel * @param vars */ public void setTime(float time, float weight, AnimControl control, AnimChannel channel, TempVars vars) { BitSet affectedBones = channel.getAffectedBones(); if (affectedBones != null && !affectedBones.get(targetBoneIndex)) { return; } Bone target = control.getSkeleton().getBone(targetBoneIndex); Vector3f tempV = vars.vect1; Vector3f tempS = vars.vect2; Quaternion tempQ = vars.quat1; Vector3f tempV2 = vars.vect3; Vector3f tempS2 = vars.vect4; Quaternion tempQ2 = vars.quat2; int lastFrame = times.length - 1; if (time < 0 || lastFrame == 0) { rotations.get(0, tempQ); translations.get(0, tempV); if (scales != null) { scales.get(0, tempS); } } else if (time >= times[lastFrame]) { rotations.get(lastFrame, tempQ); translations.get(lastFrame, tempV); if (scales != null) { scales.get(lastFrame, tempS); } } else { int startFrame = 0; int endFrame = 1; // use lastFrame so we never overflow the array int i; for (i = 0; i < lastFrame && times[i] < time; i++) { startFrame = i; endFrame = i + 1; } float blend = (time - times[startFrame]) / (times[endFrame] - times[startFrame]); rotations.get(startFrame, tempQ); translations.get(startFrame, tempV); if (scales != null) { scales.get(startFrame, tempS); } rotations.get(endFrame, tempQ2); translations.get(endFrame, tempV2); if (scales != null) { scales.get(endFrame, tempS2); } tempQ.nlerp(tempQ2, blend); tempV.interpolate(tempV2, blend); tempS.interpolate(tempS2, blend); } // if (weight != 1f) { target.blendAnimTransforms(tempV, tempQ, scales != null ? tempS : null, weight); // } else { // target.setAnimTransforms(tempV, tempQ, scales != null ? tempS : null); // } }