2

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

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

4

1 回答 1

8

Panda 使用欧拉角(又名飞行角)来表示旋转。传递给 setHpr 的角度是 yaw-pitch-roll 角度(以度为单位),除了 Panda 使用术语“heading”而不是“yaw”,因为字母 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

我知道你没有要求,但它只是以防万一它有帮助。

于 2013-07-25T12:01:59.387 回答