围绕点旋转顶点

时间:2014-10-30 03:59:05

标签: python 3d rotation reverse-engineering vertex

我正在为游戏设计水平地图。关卡中的每个对象都有3个用于定位的浮点(x,y,z)和3个用于旋转的浮点数(x,y,z)。

许多物体在被拉入3D程序时,轴位于0,0,0(世界轴),物体被拉离该点,而不是被拉入并以世界轴为中心。 / p>

以下是我的意思的二维示例:

你有一个有4个顶点(5,5),(5,10),(10,10),(10,5)的正方形,其中心是(7.5,7,5)

我需要将4个顶点旋转到0,0而不是它的中心(7.5,7.5)

我一直在使用以下python代码旋转对象:

#vX,vY,vZ is the vector coords
#rx,rY,rZ is the rotation angles in degrees
#Xrotation
xX = vX
xY = vY * math.cos(rX) - vZ * math.sin(rX)
xZ = vY * math.sin(rX) + vZ * math.cos(rX)
#Yrotation
yX = xZ * math.sin(rY) + xX * math.cos(rY)
yY = xY
yZ = xZ * math.cos(rY) - xX * math.sin(rY)
#Zrotation
zX = yX * math.cos(rZ) - yY * math.sin(rZ)
zY = yX * math.sin(rZ) + yY * math.cos(rZ)
zZ = yZ
#zX,zY,zZ is what gets outputted

上面的代码围绕其中心而不是世界轴0,0,0旋转对象。我不知道如何修改上述计算以围绕世界轴旋转对象。

我一直在这里和其他地方看过很多其他类似的问题,我的大脑即将爆炸成一个希腊符号池。

非常感谢任何帮助或指示!

1 个答案:

答案 0 :(得分:2)

您是否尝试将对象中心平移到世界轴,应用旋转,然后向后平移相反的数量?

在2D示例中,您将执行(-7.5,-7.5)的平移,应用旋转,然后翻译(7.5,7.5)。