我有一个基于教程编写的程序:
from direct.showbase.ShowBase import ShowBase
class MyApp(ShowBase):
def __init__(self):
ShowBase.__init__(self)
# Load the environment model.
self.environ = self.loader.loadModel("models/misc/rgbCube")
# Reparent the model to render.
self.environ.reparentTo(self.render)
# Apply scale and position transforms on the model.
self.environ.setScale(10, 10, 10)
self.environ.setPos(-8, 42, 0)
app = MyApp()
app.run()
我想要的是:
self.environ.rotate(轴旋转,以度为单位旋转)
我在谷歌上进行了广泛的搜索,唯一看起来像这样的东西就是:http://www.panda3d.org/manual/index.php/Position,_Rotation_and_Scale_Intervals 你猜怎么着!它没有。你能指点我一个深入解释Hpr的网站,或者只是在这里解释一下吗?感谢。
答案 0 :(得分:3)
Panda使用欧拉角(也就是飞行角度)来表示旋转。传递给setHpr的角度是偏航 - 俯仰 - 滚动角度(以度为单位),除了Panda使用术语“航向”而不是“偏航”,因为字母Y已经用于Y位置。
在你的术语中,H角是模型围绕(0,0,1)轴旋转的方式,P角围绕(1,0,0)轴旋转多少,R角多少它围绕(0,1,0)轴旋转。
如果要在自己的坐标系中旋转模型,就像您想要的那样,可以将模型作为第一个参数传递给任何setHpr函数,以便Panda在模型的坐标系中计算新的旋转:
# Rotates the model 90 degrees around its own up axis
model.setH(model, 90)
旋转模型时,它将围绕其原点(其相对(0,0,0)点)旋转。如果您希望它围绕不同的点旋转,典型的方法是创建一个旋转的虚拟中间节点:
pivotNode = render.attachNewNode("environ-pivot")
pivotNode.setPos(...) # Set location of pivot point
environ.wrtReparentTo(pivotNode) # Preserve absolute position
pivotNode.setHpr(...) # Rotates environ around pivot
我知道你并没有要求这样做,但只是为了以防万一。