本日は Blender の技術調査枠です。
Blender3.0で利用可能なpythonスクリプトを作ります。
オブジェクトのグローバル(ワールド)座標・回転・スケールの情報を取得する
オブジェクトのグローバル(ワールド)座標・回転・スケールの情報を取得するには以下の matrix_world の情報を参照します。
docs.blender.org
更に decompose 関数を利用することで座標・回転・スケール情報を分けて取得することができます。
docs.blender.org
サンプルスクリプト
スクリプトの各関数はオブジェクトのグローバル(ワールド)座標・回転・スケールの情報をそれぞれ取得して返却します。
・
# bpyインポート import bpy # 型インポート from mathutils import Vector from mathutils import Quaternion # 角度計算のため import math # 指定オブジェクトのグローバル座標(ワールド座標)を返す def get_location_global(arg_targetobject:bpy.types.Object) -> Vector: """指定オブジェクトの頂点座標(グローバル座標)を返す Keyword Arguments: arg_targetobject {bpy.types.Object} -- 対象オブジェクト Returns: Vector -- グローバル座標 """ # グローバルのトランスフォームを取得する # (https://docs.blender.org/api/current/bpy.types.Object.html?highlight=matrix_world#bpy.types.Object.matrix_world) # (https://docs.blender.org/api/current/mathutils.html?highlight=decompose#mathutils.Matrix.decompose) (translation, rotation, scale) = arg_targetobject.matrix_world.decompose() # 座標を返却する return translation # 指定オブジェクトのグローバル回転(ワールド回転)を返す def get_rotation_global(arg_targetobject:bpy.types.Object) -> Quaternion: """指定オブジェクトのグローバル回転(ワールド回転)を返す Keyword Arguments: arg_targetobject {bpy.types.Object} -- 対象オブジェクト Returns: Quaternion -- グローバル回転 """ # グローバルのトランスフォームを取得する # (https://docs.blender.org/api/current/bpy.types.Object.html?highlight=matrix_world#bpy.types.Object.matrix_world) # (https://docs.blender.org/api/current/mathutils.html?highlight=decompose#mathutils.Matrix.decompose) (translation, rotation, scale) = arg_targetobject.matrix_world.decompose() # 回転を返却する return rotation # 指定オブジェクトのグローバルスケール(ワールドスケール)を返す def get_scale_global(arg_targetobject:bpy.types.Object) -> Vector: """指定オブジェクトのグローバルスケール(ワールドスケール)を返す Keyword Arguments: arg_targetobject {bpy.types.Object} -- 対象オブジェクト Returns: Vector -- グローバルスケール """ # グローバルのトランスフォームを取得する # (https://docs.blender.org/api/current/bpy.types.Object.html?highlight=matrix_world#bpy.types.Object.matrix_world) # (https://docs.blender.org/api/current/mathutils.html?highlight=decompose#mathutils.Matrix.decompose) (translation, rotation, scale) = arg_targetobject.matrix_world.decompose() # スケールを返却する return scale # 関数の実行例 # 座標を取得する location_world = get_location_global(bpy.data.objects.get("Cube")) # 返却値をコンソールに表示する print(type(location_world)) print(location_world) # 回転を取得する rotation_world = get_rotation_global(bpy.data.objects.get("Cube")) # 返却値をコンソールに表示する print(type(rotation_world)) print(rotation_world) # スケールを取得する scale_world = get_scale_global(bpy.data.objects.get("Cube")) # 返却値をコンソールに表示する print(type(scale_world)) print(scale_world)