本日は Blender の技術調査枠です。
Blender3.0で利用可能なpythonスクリプトを作ります。
グローバル座標を指定オブジェクトのローカル座標に変換する
グローバル座標を指定オブジェクトのローカル座標に変換するには、オブジェクトが持つワールド空間変換行列の逆行列を取得して変換を行います。
docs.blender.org
docs.blender.org
サンプルスクリプト
グローバル座標での(0,0,1)座標を指定オブジェクトのローカル座標に変換するサンプルスクリプトです。
変換された座標が正しいか確認するため、最後にオブジェクトのローカル座標に変換した座標を反映しています。
・Script_convert_location_local.py
# bpyインポート import bpy # 型インポート from mathutils import Vector # グローバル座標(ワールド座標)を指定オブジェクトのローカル座標系に変換して返す def convert_location_local(arg_targetobject:bpy.types.Object, arg_worldlocation:Vector) -> Vector: """グローバル座標(ワールド座標)を指定オブジェクトのローカル座標系に変換して返す Keyword Arguments: arg_targetobject {bpy.types.Object} -- 対象オブジェクト arg_traslation {Vector} -- グローバル座標 Returns: Vector -- ローカル座標 """ # オブジェクトのワールド空間変換行列の逆行列を取得する # (https://docs.blender.org/api/current/bpy.types.Object.html#bpy.types.Object.matrix_world) # (https://docs.blender.org/api/current/mathutils.html#mathutils.Quaternion.inverted) mwi = arg_targetobject.matrix_world.inverted() # ローカル座標に変換して返却する return mwi @ arg_worldlocation # 関数の実行例 # グローバル座標での(0,0,1)座標を指定オブジェクトのローカル座標に変換する world_location = Vector((0, 0, 1)) target_obj = bpy.data.objects.get("Cube") local_location = convert_location_local(target_obj, world_location) # 返却値をコンソールに表示して確認する print(type(local_location)) print(local_location) # 実際にオブジェクトのローカル座標に返却値を設定して移動座標を確認する target_obj.location = local_location
・実行前
・実行後