blender python 計算物體軸心位置

2020-12-16 blender幫

世界坐標系的原點為(0,0,0)。是blender默認創建對象的軸心位置,只要你不動遊標位置,Blender同其他3D軟體不一樣,遊標優先過坐標原點。

如果進入"編輯"模式,對象的原點是自身的軸心點,頂點坐標值始終相對於對象的原點。

全局與本地

這給我們帶來了坐標系統。假設我有兩個球體。每個球體在世界坐標中具有不同的位置,也就是說,在全局坐標。不管它現在在世界坐標的什麼地方。我可能想要將光標定位到該球體的"中心"(0,0,0),這與該球體的"世界"沒有任何關係。所以,我現在說的是那個特定領域的"局部"坐標系。

坐標系也稱為變換方向。坐標系是關於 X/Y/Z 軸的方向。

樞軸或變換樞軸點與坐標系沒有任何關係,也與對象原點設置沒有任何關係。這只是要用作變換(移動、旋轉、縮放)或修改器的透視的原點。對於單個對象的操作,我們希望該操作相對於對象的原點執行。對於多個對象,默認值為中心點位置(就是等所有對象原點的平均數)。

當您使用錯誤的參考框架時

以下代碼段的目的是將對象的原點移動到其邊界框中心。請注意,對於嚴重修改的對象,其原點可能不再位於其"質量中心(體積)"中。

示例 1(不正確)

import bpy

from mathutils import Vector, Matrix

obj=bpy.context.active_object

center = 0.125 * sum((obj.matrix_world @ Vector(bound) for bound in obj.bound_box), Vector())

obj.location = center

obj.data.transform(Matrix.Translation(-center))

obj.data.transform(Matrix.Scale(0.998, 4, Vector((-1, 0, 0)) ) )

obj.data.transform(Matrix.Scale(0.998, 4, Vector((0, -1, 0)) ) )

obj.data.transform(Matrix.Scale(0.998, 4, Vector((0, 0, -1)) ) )

示例 2(正確)

中心做以下操作:對於邊界框 (8x) 中的每個頂點,求和坐標除以 8。這將導致邊界框中心(頂點)的坐標。

對於我們的簡單立方體,以局部坐標系坐標表示的界框中心與對象原點 = (0,0,0)

obj.matrix_world 此 Math 函數採用(局部)坐標,並在其世界空間等效項(例如相對於世界原點 (0,0,0)))中表示它們。

obj.location物體在空間中的位置。(X,Y,Z) 坐標值是相對於世界原點的數字。obj.location=中心我們不想在這裡這樣做。記住中心在局部坐標系中表示。它會將多維數據集移動到世界原點 (0,0,0),這不是我們想要的。obj. location= obj.matrix_world @ center對象的邊界框中心使用全局坐標系表示。

應用變換

對所選對象應用多個轉換。對象變換坐標將傳輸到對象數據。如果對象具有子物體,則也會將這些轉換應用於其子級。

應用變換值實質上重置對象的位置、旋轉或縮放的值,但實際上對對象不執行任何操作。對象原點移動到全局原點,轉換值設置為零。在比例方面,比例值將返回到 1。

obj.data.transform(Matrix.Translation(-center))X、Y 和 Z 位置值現在設置為零,無需移動對象。

對象局部原點設置為世界原點,並且每個對象的頂點都將遞增/遞增以適合對象的局部空間坐標值 ,對象變換坐標將傳輸到對象數據。

相關焦點

  • blender python類別
    Blender python 使用面向對象的方法處理其數據。對象類包含泛型屬性,如對象的位置。然後,它使用它的數據屬性來使用特定於對象類型的類來存儲對象特定數據,每個數據類型都是 ID 的子類bpy.data.objects是 Object類實例的列表。
  • blender python入門系列教程一:認識bpy.data.objects
    啟動blender軟體,如果沒有變更系統設置,默認3d視窗就有一個燈,一個相機和一個立方體。直接選用Scripting界面,在python控制臺,直接輸入bpy.data.objects,系統返回<bpy_collection[3], BlendDataObjects> 中文翻譯:bpy集合[3],blender數據對象輸入:bpy.data.objects
  • 在Blender 2.8 Python API 中選擇對象代碼大調整
    自從Blender 2.8更新後,對python腳本調整了原有設置選擇物體代碼,根據 Blender 2.8 Python API 更改網格(對象)可以使用 getters 和設置器進行選擇。嘗試通過調用blender2.79代碼「bpy.context.active_object.select」屬性檢查網格的選定狀態時,Blender 會引發錯誤:AttributeError: 'Object' object has no attribute 'select'要檢查是否在 Blender 2.8 中選擇了對象,請使用獲取器:bpy.context.active_object.select_get
  • blender python處理矩陣乘法變更符號
    用blender腳本編寫器編寫任何矩陣乘法,乘法* 語法仍然有效,這個只能作為 2.8 中嘗試普通乘法,而不是 2.7 中的矩陣乘法。如果你用在矩陣乘法會報出有趣的錯誤,因為這並不一定會拋出一個錯誤,a * ba @ b想要支持 2.7 和 2.8 的相同矩陣乘法樣式?
  • blender python腳本重點基礎-context選擇
    今天主要講解一下blender上下文context選擇,活動項,選擇物體,可選物體,各種方法和細節的區別在3D視窗我放置了立方體命名為A,球體命名為P,相機命名為C,點光源命名為L,各自一個,方便記憶01bpy.context.object活動項,系統會把一堆所選物體,把單獨激活為活動項外框顯示顏色同其它選擇物全不一樣,活動項算是Blender
  • blender2.9 python3實用腳本,交換兩個位置
    不知道你有沒有試過,在Blender內交換兩個物體的軸心位置。這類操作通常用於網格物體之間交換位置,或者在場景中進行打光,將兩個燈光轉換,看看燈光效果,其實這個操作很簡單,但是操作一點也不方便,物體位置基本上都是浮點,不好記憶,可能你把 XYZ值拷貝到記事本中,需要很多步驟才能完成操作,將這一功能寫成腳本,確實很有實用價值上代碼import bpydef swaptwoLocation(a,b):
  • 放棄機器學習,Python 如何進行物體檢測?
    但實際上,我們可以在不使用機器學習或任何其他框架的情況下進行物體檢測。在本文中,我將向你展示如何僅使用Python進行操作。首先,我們定義一個模板圖像(或者叫模板物體),然後程序將在源圖像中查找與我們選擇的模板匹配的所有其他物體。舉例來說明一下。下面有兩張圖片,上面是飛機的源圖像,下面是模板照片,其中的物體為飛機。
  • 使用Visual studio code 作為外部 IDE 編寫 Blender2.9 腳本
    從官方網站下載 Python 解釋器分發: www.python.org/downloads/下載與 Blender 中使用的版本相同的 Python 解釋器版本。blender2.90 b的 Python版本為3.7.7下載後,安裝 Python 解釋器。
  • 用代碼有多少種方法訪問同一個網絡物體
    在場景放一個圓錐體,你可以想像到,blender python 能用多少種代碼寫法來訪問這個物體1. 由pby向下訪問。bpy.data.objects[ ' Cone ' ],或者bpy.data.objects[ ' 序號 ' ],但由於序號是跟物體生成的順序有關,這個用起來就不方便。2. 如果圓錐體是當前活動項。
  • 如何設置PyCharm2020,連接到blender進行代碼編寫
    沒有明確的方式將 IDE 連接到允許快速工作流程的blender建議本文檔展示了一個blender2.9-pycharm2020 開發代碼工作流程,你會發現,方便處理你好多的麻煩。解決 方案在電腦上安裝blender2.9和 Pycharm2020找到一個合適的文件夾,您可以在其中將所有加載項開發工作放在該文件夾。此文件夾將有一個特殊的格式,將使我們能夠連接到blender.
  • blender把兩個模型拼接到一塊的截圖操作過程
    今天講解了blender把兩個模型拼接到一塊的操作過程,相信通過學習blender把兩個模型拼接到一塊的操作步驟,大家對blender軟體一定會有更多的了解的!Blender軟體版本:2.79a 官方正式版圖形圖像立即查看1、打開blender默認一個立方體。2、我們接著再創建一個稜角球。3、我們把立方體與稜角球放在想要拼接的樣式位置。
  • 放棄機器學習框架,如何用Python做物體檢測?
    下面我們來編寫python代碼,圈出源圖像中所有匹配模板圖像的區域。首先,我們來檢測一個物體。然後再調整代碼實現多個物體的檢測。模板圖像與源圖像匹配後,我們記下左上角的位置,然後在實際匹配的區域周圍繪製一個框。為此,我們需要知道此模板圖像的高度和寬度。下面我們來繪製矩形。res = cv2.matchTemplate(img_gray, template, cv2.TM_SQDIFF)模板匹配是OpenCV提供的功能,它利用源圖像和模板圖像的灰度圖像,計算我們需要的統計指標。
  • 放棄機器學習框架,如何用 Python 做物體檢測?
    下面我們來編寫python代碼,圈出源圖像中所有匹配模板圖像的區域。首先,我們來檢測一個物體。然後再調整代碼實現多個物體的檢測。模板圖像與源圖像匹配後,我們記下左上角的位置,然後在實際匹配的區域周圍繪製一個框。為此,我們需要知道此模板圖像的高度和寬度。下面我們來繪製矩形。res = cv2.matchTemplate(img_gray, template, cv2.TM_SQDIFF)模板匹配是OpenCV提供的功能,它利用源圖像和模板圖像的灰度圖像,計算我們需要的統計指標。
  • blender2.9 python訪問網格三角形
    當需要訪問網格三角形時,必須首先使用網格calc_loop_triangles方法計算它們。在調用calc_loop_triangle方法之前,Mesh loop_triangles的引用屬性將引用空集合。
  • 隨機生成N個立方體,學習blender Python隨機數生成
    打開blender控制臺首先輸入import random print(random.randint(0,9))多次執行print(random.randint(0,9)),就能見到系統每次都生成0-9內的隨機整數使用了
  • OpenCV測量物體的尺寸技能 get~
    其原理非常的簡單,實際的空間距離=圖上距離/地圖上的比例尺。我們今天要介紹的內容實際上原理和上面所說的是相同的,關鍵是如何獲取圖上距離和比例尺呢?首先需要知道一個和比例尺類似的概念叫 pixels per metric ratio。
  • 軸心點和凱利公式
    外匯中有許多技術分析,今天就和大家分享一個能用公式計算出來的系統--軸心點系統。它的使用方法也很簡單,首先要計算出軸心點,一般以日K線的最高價、最低價、收盤價相加除以3得出來的點位就是軸心點(也有用開盤價來計算的,這個公式不唯一,目前我了解的是用最高價、最低價和收盤價去計算),軸心點就是K線多空力量的平衡點。
  • 如何精確計算物體自由落體的速度
    假設在一個星球上,某物體從距離球心 L 的位置開始自由落體,不考慮任何阻力,不考慮落到星球地面和內部的情況,求物體在下落 t 秒時的速度。要求:求精確值。因為重力加速度與下落物體與球心的距離有關,所以物體下落過程中重力加速度是變化的。對本題的計算要求考慮這種變化。
  • Python之圓周率計算的算法
    蒙特卡洛方法原理對於下圖區域,我們在區域中隨機撒點,此點會隨機地落在區域中的某一個位置上。蒙特卡洛方法計算圓周率蒙特卡洛方法求解圓周率的編程實現公式法計算圓周率結合上面公式,利用python中的for循環即可求解圓周率,不再贅述。
  • MEXGROUP丨交易必勝法寶——軸心理論,你值得擁有
    軸線點支撐阻力計算一般來說軸心點系統由軸心點(PP)、第一撐阻(S1、R1)、第二撐阻(S2、R2)以及第三撐阻(S3、R3)組成,(註:其中第三撐阻(S3、R3)若非少數波動特別劇烈的行情,否則能測試到位的頻率相對較小,而我們說過,軸心點交易法多適用於日內短線操作,所以對於此類小概率的行情波幅,我們一般本著穩健操作的原則進行捨棄,故以下我們將公式完整展示,有需求者可自行考量