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 について詳しく説明している Web サイトを教えていただけますか、それともここで説明していただけますか? ありがとう。

4

1 に答える 1

8

Panda はオイラー角 (飛行角) を使用して回転を表します。setHpr に渡される角度は、Yaw-pitch-roll 角度 (度単位) です。ただし、Panda では、文字 Y が Y 位置に既に使用されているため、「yaw」ではなく「heading」という用語を使用します。

あなたの用語では、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 に答える