gpt4 book ai didi

java - 试图制造旋转螺旋桨。围绕原点旋转,而不是它本身

转载 作者:行者123 更新时间:2023-12-04 06:42:42 25 4
gpt4 key购买 nike

我正在尝试用 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);

任何帮助将不胜感激。 PS:我试图在前后将其翻译成原点,但似乎没有任何作用。

最佳答案

没有足够的Java知识来给出完整的答案;数学术语中的正确解决方案正如您所怀疑的:将对象的中心平移到原点,旋转,然后将其平移回其原始位置。

但是,很可能(即,我猜)当您组合转换时,它们会被后乘以产生转换发生在模型空间中的效果。您可能想要的是预乘法,以产生在世界空间中发生变换的效果。

考虑一下风车的帆。在代码中,您希望能够转换到风车的顶部,然后调用绘制风帆的例程。该例程可能会应用旋转然后绘制。但就变换而言,您实际上希望在原点旋转帆,以便它们围绕中心旋转,然后将它们移出。因此,转换的应用顺序与您请求它们的顺序相反。

这意味着,您希望将转换应用为:

  • 远离原点
  • 旋转
  • 移至原点

  • 例如,如果您使用 OpenGL(这也是一个后乘法器,即使您实际上并不知道它也很容易在本示例中遵循),您可能会这样做:
    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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com