【发布时间】:2014-06-19 16:55:26
【问题描述】:
四元数不仅可以描述旋转,还可以描述方向,即从初始(零)位置旋转。
我希望模拟从一个方向到另一个方向的平滑旋转。我计算了起始方向startOrientation 和结束方向endOrientation,并希望将中间方向描述为startOrientation*(1-argument) + endOrientation*argument,而argument 从0 更改为1。
猴子引擎更新功能代码如下:
@Override
public void simpleUpdate(float tpf) {
if( endOrientation != null ) {
if( !started ) {
started = true;
}
else {
fraction += tpf * speed;
argument = (float) ((1 - Math.cos(fraction * Math.PI)) / 2);
orientation = startOrientation.mult(1-argument).add(endOrientation.mult(argument));
//orientation = startOrientation.mult(1-fraction).add(endOrientation.mult(fraction));
log.debug("tpf = {}, fraction = {}, argument = {}", tpf, fraction, argument);
//log.debug("orientation = {}", orientation);
rootNode.setLocalRotation(orientation);
if( fraction >= 1 ) {
rootNode.setLocalRotation(endOrientation);
log.debug("Stopped rotating");
startOrientation = endOrientation = null;
fraction = 0;
started = false;
}
}
}
}
余弦公式预计在开始时平滑地加速和在结束时减速。
代码可以工作,但不如预期:平滑旋转在fraction 和argument 值达到1 之前很久就开始和结束了,我不明白,为什么。
为什么orientation 的值达到endOrientation 这么快?
【问题讨论】:
标签: java 3d rotation quaternions jmonkeyengine