java使用java3D和rotpospathInterpolator制作正确的动画
我试图让一个物体在一个正方形中飞过我的场景(这是正确的),但我希望它也朝向它要去的地方
目前的问题是物体会飞,并且在飞行时会旋转(这不是自然现象)。我希望它飞到一个点,然后停下来旋转,然后飞到下一个点,然后再次旋转,依此类推
我试图通过Java3D函数实现这一点: 旋转插补器
这就是我正在做的:
Alpha alphaNave = new Alpha( -1, Alpha.INCREASING_ENABLE, 0,0,6000,0,0,0,0,0 );
TransformGroup target = new TransformGroup();
Transform3D axisOfRotPos = new Transform3D();
float[] alphas = {0.0f, 0.25f, 0.50f, 0.75f, 1.0f};
Quat4f[] quats = new Quat4f[5];
Point3f[] positions = new Point3f[5];
target.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
quats[0] = new Quat4f(0.0f, 1.0f, 0.0f, (float) Math.toRadians(0));
quats[1] = new Quat4f(0.0f, 1.0f, 0.0f, (float) Math.toRadians(90));
quats[2] = new Quat4f(0.0f, 1.0f, 0.0f, (float) Math.toRadians(180));
quats[3] = new Quat4f(0.0f, 1.0f, 0.0f, (float) Math.toRadians(270));
quats[4] = quats[0];
positions[0]= new Point3f( -20.0f, 0.0f, 20.0f);
positions[1]= new Point3f( -20.0f, 0.0f, -20.0f);
positions[2]= new Point3f( 20.0f, 0.0f, -20.0f);
positions[3]= new Point3f( 20.0f, 0.0f, 20.0f);
positions[4]= positions[0];
RotPosPathInterpolator rotPosPath = new RotPosPathInterpolator(
alphaNave, target, axisOfRotPos, alphas, quats, positions);
# 1 楼答案
首先是简短的旁注:创建四元数时,最后一个分量不是角度。为了创建一个四元数来描述围绕某个轴、围绕某个角度的旋转,最简单的方法是遍历
AxisAngle4f
类(不幸的是,没有方便的构造函数来实现这一点。我建议用返回适当四元数的实用方法来包装这三行)
关于实际问题:如果我正确理解了你,那么期望的行为是:
(这是从我在下面添加的MCVE创建的)
如果只希望有一个移动(无旋转),则必须在插值路径中插入两个点,其中只有位置更改,但旋转保持不变。类似地,如果只需要旋转,则必须创建两个点,其中只有旋转发生变化,但位置保持不变。当然,您必须始终相应地调整
alpha
值在本例中,您的路径将由9个点组成。手动添加这些点,并计算所需的
alpha
值是一件麻烦事。我建议为此创建一个小型实用程序类。下面的MCVE允许将点(每个点由位置和角度组成)添加到InterpolatorData
类,该类随后为插值器提供数据另一条评论:使用这样一个实用程序类,这个解决方案可能还可以,但是对于更复杂的路径和行为,我们可能会为路径处理创建一个专用的基础设施