2018年7月23日 星期一

從Blender裡萃取模組資料(2)

從Blender裡萃取模組資料(2)

前言

  續前篇從Blender裡萃取模組資料(1),這次會說明物件Transform的資料如何萃取,在此做個紀錄。

內容

  萃取Transform的Position與Scale相當容易,直接從object的Property取得即可,但Rotation的部分就不能直接取得了,相看下圖
Blender的旋轉模式
可以在編輯器看到旋轉模式的選項,在不同的旋轉模式要取不同的Property才能正確取到值,如下說明:
1.  Quaternion(WXYZ)模式下,取roation_quaternion
2.  XYZ Euler模式下,取roation_euler
3.  XZY Euler模式下,取roation_euler
4.  YXZ Euler模式下,取roation_euler
5.  YZX Euler模式下,取roation_euler
6.  ZXY Euler模式下,取roation_euler
7.  ZYX Euler模式下,取roation_euler
8.  Axis Angle模式下,取roation_axis_angle

旋轉模式在編輯器的預設值是"XYZ Euler",以我的需求來說,我會希望它是"Quaternion(WXYZ)",所以該怎麼轉換呢?只要將現在的旋轉模式轉到你想要的模式後,再去取對應的Property即可,整個Transform的資料萃取範例如下

import bpy

tagObj = bpy.data.objects["Cube"]
#
print('Object postion:',tagObj.location)

if obj.rotation_mode == 'QUATERNION':
  print('Object ratation(quaternion):',tagObj .rotation_quaternion)
else:
  #save old ratation mode for recover it.
  oldRotationMode = obj.rotation_mode
  #
  obj.rotation_mode = 'QUATERNION'
  print('Object ratation(quaternion):',tagObj .rotation_quaternion)
  #Recover ratation mode
  obj.rotation_mode = oldRotationMode 

#
print('Object scale:',tagObj.scale)

在取得非"Quaternion"時要把舊的模式記住,這只是為了恢復原本的操作模式,如果不介意旋轉模式被更改的話可以直接設成想要模式後取Property即可。

參考資料

Blender Documentation Contents

相關文章

從Blender裡萃取模組資料(1)
從Blender裡萃取模組資料(3)

沒有留言:

張貼留言