Panda3d模型旋转

时间:2013-07-22 21:41:20

标签: python panda3d

我有一个基于教程编写的程序:

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的网站,或者只是在这里解释一下吗?感谢。

1 个答案:

答案 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

我知道你并没有要求这样做,但只是为了以防万一。