作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试用 Java 3D 创建一个旋转的飞机螺旋桨。此刻,它正围绕着原点旋转。但是,我需要它围绕自身旋转。我没有用 Java 做过很多 3D 图形,所以我很难过。
TransformGroup rotateTheBlades = new TransformGroup();
rotateTheBlades.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
Alpha rotationAlpha = new Alpha(-1,5000);
RotationInterpolator rotator = new RotationInterpolator(
rotationAlpha,rotateTheBlades);
Transform3D abc = new Transform3D();
abc.rotZ(Math.PI/2);
rotator.setTransformAxis(abc);
rotator.setSchedulingBounds(new BoundingSphere());
rotateTheBlades.addChild(rotator);
rotateTheBlades.addChild(propeller);
sceneBG.addChild(rotateTheBlades);
最佳答案
没有足够的Java知识来给出完整的答案;数学术语中的正确解决方案正如您所怀疑的:将对象的中心平移到原点,旋转,然后将其平移回其原始位置。
但是,很可能(即,我猜)当您组合转换时,它们会被后乘以产生转换发生在模型空间中的效果。您可能想要的是预乘法,以产生在世界空间中发生变换的效果。
考虑一下风车的帆。在代码中,您希望能够转换到风车的顶部,然后调用绘制风帆的例程。该例程可能会应用旋转然后绘制。但就变换而言,您实际上希望在原点旋转帆,以便它们围绕中心旋转,然后将它们移出。因此,转换的应用顺序与您请求它们的顺序相反。
这意味着,您希望将转换应用为:
glTranslatef(centreOfBody.x, centreOfBody.y, 0.0f);
glRotatef(angle, 0.0f, 0.0f, 1.0f);
glTranslatef(-centreOfBody.x, -centreOfBody.y, 0.0f);
关于java - 试图制造旋转螺旋桨。围绕原点旋转,而不是它本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4053745/
我是一名优秀的程序员,十分优秀!