Re: ボーンの位置座標取得

投稿ツリー


このトピックの投稿一覧へ

通常 Re: ボーンの位置座標取得

msg# 1.1
depth:
1
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2015/9/7 12:43
完全無欠猫  長老 居住地: 兵庫  投稿数: 750
3D座標がビュー内に投影された時の2D座標が知りたいということでしょうか・・・。
その前提で書いています。

以下はPose boneでの話です。
子Boneは親Boneの座標空間にあります。
従って親Boneを遡ってObject空間の座標を取得して、それをObjectのmatrix_worldでワールド座標に変換します。

この部分は知らなくても・・・と、いうかいろいろ考えすぎて分からなくなるかもしれないので・・・削除。
例えば、bone1>bone2>bone3という構造の場合(bone1が最初のboneでbone2はbone1の子供という図式です)
obj = bpy.data.objects['AAAAAA']
算出方法に誤りがあったので訂正。matrixは最終的なBoneのmatrixだったので・・・
bone1mat = obj.pose.bones['bone1'].matrix
bone2mat = obj.pose.bones['bone2'].matrix
bone3mat = obj.pose.bones['bone3'].matrix
bone3loc = obj.pose.bones['bone3'].location
Lbone3mat = bone3mat * bone2mat.transposed() * bone1mat.transposed()
worldBone3Loc = obj.matrix_world * Lbone3mat * bone3loc


正しくは、こうです。
bone3loc = obj.pose.bones['bone3'].head
worldBone3Loc = obj.matrix_world * bone3loc

これを該当ビュー内の2D座標に変換するにはbpy_extrasパッケージを使います。
bpy_extras.view3d_utils.location_3d_to_region_2d(region, rv3d, coord, default=None)という関数があります。
coordが上記で求めた3D座標です。
regionとrv3dは該当スクリーンから求めます。
これは各データのtypeを比較して取得した方がいいと思います。
scr = bpy.context.screen

scr.areas[5].typeが'VIEW3D'になります。
scr.areas[5].regions[4].typeが'WINDOW'になります。
scr.areas[5].spaces[0].typeが'VIEW_3D'になります。

ですので、ワールド座標のVector((0,0,0))を該当ビューで求める場合
ar = scr.areas[5]
rLoc = bpy_extras.view3d_utils.location_3d_to_region_2d(ar.regions[4], ar.spaces[0].region_3d, Vector((0,0,0)))
rLocが該当ビュー内の相対座標になるはずです。

しかし、確認していないので間違っているかもしれませんが・・・・。

== 追記 ==
あぁぁぁ・・・・カメラビューかなぁ・・。
カメラビューの場合はこっちの関数を・・・。
bpy_extras.object_utils.world_to_camera_view(scene, obj, coord)
objはCamera objectです。

== 追記の追記 ==
書かなくても分かるかな?と思ったので書かなかったのですが・・・初心者の方という事だったのでもう少し書きます。
scene = bpy.context.scene
camera = scene.camera
rLoc = bpy_extras.object_utils.world_to_camera_view(scene, camera, worldBone3Loc)
renderSetting = scene.render
imagePosX = renderSetting.resolution_x * rLoc.x
imagePosY = renderSetting.resolution_y * rLoc.y
imagePosX, imagePosYがレンダリングイメージ内の座標になると思います。
投票数:4 平均点:5.00

  条件検索へ


ログイン

ユーザ名:

パスワード:



パスワード紛失

クイックリンク

2021/07/01版
●Blender.org
BlenderFoundation
- Blenderのダウンロード
- 公式チュート等
- 公式マニュアル(和訳)

●ニュース(英文)
BlenderNation

●Blenderコミュニティ
blenderartists.org

●Blender Q&A
- Blender Stack Exchange

●テストビルド
Buildbot(自動生成)


●開発関連
公式開発サイト
Blender開発blog
Blender Wiki