57

Blender の Python ゲーム スクリプトを理解するために、私は現在、このリンクの FPSController 構造を使用して、球体の周りを歩くことができるシーンを構築しようとしています。重力と FPSController の向きについては、現在次のような python Controller を作成しようとしました。

def main():
    print("Started")

    controller = bge.logic.getCurrentController()
    me = controller.owner

    distance, loc, glob = me.getVectTo((0,0,0))

    grav = controller.actuators['Gravity']

    strength = me['Gravity']
    force = strength*(distance*distance)*glob

    grav.force = force

    try:
        rot = Vector((0,0,-1)).rotation_difference(glob).to_matrix()
    except Exception as E:
        print(E)
        rot = (0,0,0)

    rotZ = me.orientation
    me.orientation = rot*rotZ

    controller.activate(grav)

main()

これは、任意の角度が 180 度を超えるまで大まかに機能し、不連続に見えます。これは、rotation_difference が不連続であることから来ていると思います – Math Types & Utilities に関するブレンダーのドキュメントには何も書かれていません。また、四元数表現についてまだ十分に考えていないため、連続したマップが可能かどうかを確認できませんでした – もっとエレガントな方法があると思いますローカルの Z 方向は常にマウスに依存し、ローカルの X 方向と Y 方向は特定のベクトルに継続的に依存するようにするにはどうすればよいでしょうか?

4

2 に答える 2

4

コンセンサスは、クォータニオンを使用してそのような回転を実現する必要があるようです。

APIについては、http ://www.blender.org/documentation/249PythonDoc/Mathutils.Quaternion-class.htmlを参照してください。

数学の紹介については、http: //en.wikipedia.org/wiki/Rotation_formalisms_in_three_dimensions#Quaternionsを参照してください。

于 2013-09-10T19:32:10.967 に答える
0

アライン機能があります。ゲームオブジェクトが own と呼ばれる場合、own.alignAxisToVect(vector, 2, 1)2 が Z 軸 (x=0,y=1,z=2) のインデックスであり、1 が整列の速度 (0 と 1 の間) であるようなものでなければなりません。

于 2016-09-03T22:28:44.157 に答える