Blender 3D:從新手到專業/高階教程/Python 指令碼/程式化物件建立
|
|
適用 Blender 版本:2.49。 |
Blender 文件可以包含文字塊,它們與3D 場景中的文字物件不同(儘管前者可以轉換為後者)。除了生成文字物件之外,文字塊可以根據你的需要服務於任何目的;例如,將其用於將工作流程說明與文件一起傳遞給同事;在使用者開啟文件時看到的初始佈局中顯示版權或幫助資訊;或者儲存一個 Python 指令碼,使用者可以透過執行該指令碼對文件執行一些有用的操作。
文字塊在文字編輯器視窗中進行編輯。文字編輯器還提供命令來從外部檔案載入文字塊的內容,或將其儲存到外部檔案。以及執行文字作為 Python 指令碼。
開啟一個新的預設 Blender 文件。垂直將 3D 檢視分成兩部分。將其中一側的型別更改為文字編輯器視窗。在標題中,你會看到一個小的彈出選單,只顯示一個雙箭頭;單擊它,它應該顯示三個專案:“文字”、“新增新”和“開啟新”。“新增新”建立一個新的空文字塊,而“開啟新”透過從外部檔案讀取內容來建立一個新的文字塊。但“文字”已經是預設空文字塊的名稱,所以只需使用它;一旦你選中它,你應該會看到一個紅色插入光標出現在左上角,表示你可以開始輸入。
與互動式 Python 控制檯不同,沒有為你自動匯入任何內容。因此,像在任何其他 Python 指令碼中一樣,你需要提及你要訪問的每個模組。
讓我們編寫一個指令碼,將一個新的網格基本體插入 Blender 文件,即一個四面體。首先,我們需要建立一個新的網格資料塊,我們將其命名為“四面體”。
NewMesh = Blender.Mesh.New("Tetrahedron")
然後我們需要定義頂點的座標;對於邊長為 1 Blender 單位的四面體,合適的數值是 , , 和 。或在 Python 中
NewMesh.verts.extend \
(
[
(0, -1 / math.sqrt(3),0),
(0.5, 1 / (2 * math.sqrt(3)), 0),
(-0.5, 1 / (2 * math.sqrt(3)), 0),
(0, 0, math.sqrt(2 / 3)),
]
)
我們還需要定義物件的表面;每個表面都是透過列出頂點陣列中的索引序列來定義的(你不需要擔心定義邊;Blender 會從表面中推斷出它們)
NewMesh.faces.extend \
(
[[0, 1, 2], [0, 1, 3], [1, 2, 3], [2, 0, 3]]
)
這足以滿足網格的要求,現在我們建立一個實際的物件資料塊,它將出現在場景中(我們也將其命名為“四面體”)
TheObj = Blender.Object.New("Mesh", "Tetrahedron")
將它連結到我們剛剛製作的網格
TheObj.link(NewMesh)
為了使物件出現在場景中,它必須連結到場景
TheScene = Blender.Scene.GetCurrent()
TheScene.link(TheObj)
最後,告訴 Blender 場景已更改
TheScene.update()
並重新繪製 3D 檢視以顯示更新的場景
Blender.Window.Redraw()
你的完整指令碼應該如下所示,包括引用的匯入math和Blender模組;請注意,還使用了指令來確保“/”運算子始終返回實數,而不是整數;這是 Python 2.x 中的良好實踐,因為它從 Python 3.0 開始成為強制行為。
from __future__ import division
import math
import Blender
NewMesh = Blender.Mesh.New("Tetrahedron")
NewMesh.verts.extend \
(
[
(0, -1 / math.sqrt(3),0),
(0.5, 1 / (2 * math.sqrt(3)), 0),
(-0.5, 1 / (2 * math.sqrt(3)), 0),
(0, 0, math.sqrt(2 / 3)),
]
)
NewMesh.faces.extend \
(
[[0, 1, 2], [0, 1, 3], [1, 2, 3], [2, 0, 3]]
)
TheObj = Blender.Object.New("Mesh", "Tetrahedron")
TheObj.link(NewMesh)
TheScene = Blender.Scene.GetCurrent()
TheScene.link(TheObj)
TheScene.update()
Blender.Window.Redraw()
在你的 3D 檢視中,刪除任何預設立方體,以避免它遮擋物體。現在回到顯示上述指令碼的文字編輯器視窗,並按 ALT + P 來執行它;你應該會看到你的新四面體出現在 3D 檢視中!
如果執行指令碼時出現任何錯誤,Blender 將顯示一條神秘的訊息來通知你。例如,以下簡單的單行指令碼
raise RuntimeError("Uh-oh")
顯示此訊息

要獲取更多詳細資訊,你必須檢視標準錯誤;在 Linux/Unix 系統上,如果你是從命令列呼叫 Blender,則訊息將出現在終端會話中;否則,它將附加到你的~/.xsessionerrors檔案中,如果你從 GUI 啟動了 Blender。在 Windows 上,訊息將出現在控制檯視窗中。透過在適當的位置四處查詢,你應該能夠找到完整的 Python 回溯
Traceback (most recent call last):
File "Text.001", line 1, in <module>
RuntimeError: Uh-oh