Java 立方体三维点旋转X&;Z

Java 立方体三维点旋转X&;Z,java,opengl-es,rotation,minecraft,euler-angles,Java,Opengl Es,Rotation,Minecraft,Euler Angles,包括有关目标的详细信息: 首先,我的目标是让点围绕X,Y,Z轴旋转立方体,从而旋转立方体本身 描述期望值: 我希望在绕X轴旋转17.18°后得到: 我希望在绕Z轴旋转17.18°后得到: 实际结果: 黑色形状是没有旋转的默认立方体 白色形状是旋转的立方体 使用我的公式,绕X轴旋转17.18°后的实际结果: 使用我的公式,绕Z轴旋转17.18°后的实际结果: 展示您的尝试,告诉我们您(在本网站或其他地方)发现了什么,以及为什么它不能满足您的需求。当你提供研究时,你

包括有关目标的详细信息:

  • 首先,我的目标是让点围绕X,Y,Z轴旋转立方体,从而旋转立方体本身
描述期望值:

  • 我希望在绕X轴旋转17.18°后得到:

  • 我希望在绕Z轴旋转17.18°后得到:

实际结果:

  • 黑色形状是没有旋转的默认立方体

  • 白色形状是旋转的立方体

  • 使用我的公式,绕X轴旋转17.18°后的实际结果:

  • 使用我的公式,绕Z轴旋转17.18°后的实际结果:

展示您的尝试,告诉我们您(在本网站或其他地方)发现了什么,以及为什么它不能满足您的需求。当你提供研究时,你可以得到更好的答案。

我看到一些网站准确地描述了我想要的:

显示一些代码

  • 首先,我使用Java,因为我的问题是我的Minecraft虚拟形状与真实形状不符
旋转方法

public void rotateX(){
对于(int i=0;i}
您的旋转方法是正确的,但它们围绕穿过原点的轴旋转

您希望它们围绕穿过对象中心的轴旋转。您看不到围绕Y轴旋转的问题,因为它恰好穿过立方体的中心

可以通过在旋转前将对象“移动”到原点,然后在旋转后将其移回原点来修复此问题。例如,对于X旋转:

      double y = vector.getY() - objectCenterY;
      double z = vector.getZ() - objectCenterZ;
        
      vector.setY(y * cosTheta - z * sinTheta + objectCenterY);
      vector.setZ(z * cosTheta + y * sinTheta + objectCenterZ);