【blender】使用bpy對一個obj的不同mesh進行不同的材質貼圖(涉及對bmesh的操作)

BMesh 簡介

BMesh 是 Blender 中用于表示和操作網格數據的底層數據結構系統,它是傳統網格數據結構的高級替代品。

主要特點

  1. 靈活拓撲支持

    • 支持 n-gons(任意邊數的多邊形),而不僅僅是三角形和四邊形
    • 允許邊和頂點不屬于任何面
  2. 高效操作

    • 設計用于支持復雜的網格編輯操作
    • 提供豐富的 API 用于網格操作
  3. 數據結構

    • 基于半邊數據結構(Half-Edge)
    • 包含三種基本元素:頂點(verts)、邊(edges)和面(faces)

使用場景

BMesh 主要用于:

  • 編寫 Blender 的網格編輯工具
  • 開發復雜的網格處理插件
  • 執行高級網格操作如布爾運算、細分等

基本元素

  1. BMVert:表示頂點
  2. BMEdge:表示邊
  3. BMFace:表示面

BMesh 提供了比傳統網格更強大的功能,特別是在處理復雜拓撲和非流形幾何時表現優異。

訪問方式

在 Python API 中,可以通過 bmesh 模塊訪問 BMesh 功能,通常用于編寫網格處理腳本和插件。

創建一個bmesh后,可以貼圖不同的材質嗎?

是的,在一個 bmesh 對象中創建的多個面完全可以賦予不同的材質,只要你后續把 bmesh 寫入 mesh,并對 mesh.polygons[i].material_index 設置正確即可。


? 關鍵點總結

操作目標是否可行方法
一個對象中多個面貼不同材質? 支持設置 face.material_index
bmesh 創建時直接貼材質? 不直接支持需要在 bmesh.to_mesh() 之后,通過 mesh.polygons[...] 設置
一個 Object 支持多個材質? 支持obj.data.materials.append(...) 添加多個材質槽

? 正確做法:一個 Object、多個材質、不同面貼圖

1. 創建 bmesh 添加多個面

import bpy
import bmesh# 新建 mesh 和 object
mesh = bpy.data.meshes.new("MyMesh")
obj = bpy.data.objects.new("MyObject", mesh)
bpy.context.collection.objects.link(obj)bm = bmesh.new()# 頂點
v1 = bm.verts.new((0, 0, 0))
v2 = bm.verts.new((2, 0, 0))
v3 = bm.verts.new((2, 2, 0))
v4 = bm.verts.new((0, 2, 0))v5 = bm.verts.new((3, 0, 0))
v6 = bm.verts.new((5, 0, 0))
v7 = bm.verts.new((5, 2, 0))
v8 = bm.verts.new((3, 2, 0))# 兩個面
face1 = bm.faces.new([v1, v2, v3, v4])
face2 = bm.faces.new([v5, v6, v7, v8])

2. 寫入 mesh

bm.to_mesh(mesh)
bm.free()
mesh.update()

3. 添加兩個材質到 obj

mat1 = bpy.data.materials.new("Red")
mat2 = bpy.data.materials.new("Green")mat1.diffuse_color = (1, 0, 0, 1)  # RGBA
mat2.diffuse_color = (0, 1, 0, 1)obj.data.materials.append(mat1)
obj.data.materials.append(mat2)

4. 給 mesh.polygons[i] 設置材質索引

# 給第一個面用第一個材質
obj.data.polygons[0].material_index = 0# 給第二個面用第二個材質
obj.data.polygons[1].material_index = 1

結果

在這里插入圖片描述


🔁 所以流程是:

  1. bmesh 中構建所有頂點和面;
  2. bm.to_mesh(mesh) 把面數據寫到 mesh.polygons
  3. 添加所有材質到 obj.data.materials
  4. 遍歷 mesh.polygons[i],設置對應的 material_index = X

?注意事項

  • 必須保證 obj.data.materials 中的材質數量 >= 所有 material_index 的最大值 + 1;
  • material_index 是一個整數索引(指向材質槽的位置),不是材質本身;
  • 所有 material_index 設置必須在 bm.to_mesh() 后進行,因為 bmesh 階段沒有 material_index 概念。

撰寫該博文的原因是有一個需要用腳本來控制一個立方體不同面的貼圖,其實現的基本原理和上述代碼是一致的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912326.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912326.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912326.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何通過nvm切換本地node環境詳情教程(已裝過node.js更改成nvm)

針對系統已裝過node環境或者第一次安裝nvm環境如何切換nvm 文章目錄 系列文章目錄前言一、刪除原有node環境二、使用步驟 1.下載nvm軟件2.安裝node不同版本3.使用node版本4.配置包文件、安裝包、配置包環境 總結 一、刪除原有node環境 1、刪除之前安裝的node包,以及…

概率論符號和公式整理

本文是由AI生成后,經作者優化整理的文章。個人總結,僅限參考! 以下整理了概率論中的常用符號和公式表格,覆蓋基礎知識、關鍵定理和常用分布: 一、基礎集合與事件符號 符號名稱含義/公式說明 S S S樣本空間所有可能結…

SpringSecurity是什么?

Spring Security是Spring生態中的安全框架,用于管理Web應用的認證與權限控制,支持多種登錄方式并集成防護機制,可防范CSRF/XSS等攻擊,保障企業級系統的安全性。 一、核心功能與定位 身份認證(Authentication&#xff…

nt!IoSynchronousPageWrite函數分析之atapi!IdeReadWrite----非常重要

第一部分:預分析 1: kd> g Breakpoint 7 hit atapi!IdeReadWrite: f729cb2a 55 push ebp 1: kd> kc # 00 atapi!IdeReadWrite 01 atapi!IdeSendCommand 02 atapi!AtapiStartIo 03 atapi!IdeStartIoSynchronized 04 nt!KeSynchronizeExecuti…

軟考系統架構設計師經驗總結

本文目的 對參加的2025年上半年系統架構設計師考試進行總結提供一些備考思路給未來參加系統架構設計師的同學 個人背景 工作背景 本科計算機與技術(學過一些計算機基礎課程),15年畢業后從事過b端(人群畫像、營銷、用戶增長、硬…

Tailwind CSS工作原理

文章目錄 前言1. 指令解析與 AST 操作🚩 **核心處理流程**🧩 **具體流程說明** 2. **配置驅動的樣式生成**3. **JIT 模式(Just-In-Time)的核心邏輯**4. **插件與自定義擴展**5. **與 PostCSS 管道的協同**6. **優化與 Tree Shakin…

web網頁開發,在線%旅游景點管理%系統demo,基于Idea,vscode,html,css,vue,java,maven,springboot,mysql

經驗心得 兩業務單,都是業務邏輯開發,基本crud,什么是前后端,怎么分離前后端,前后端怎么通訊的,是以什么格式進行通訊這些咱們都需要掌握,后面剩下就是前后端不同層如何優化。管理系統很常見了其…

面試150 長度最小的子數組

思路 聯想到滑動窗口法。左窗口的值為0,遍歷數組對數組求和,當數組的和大于等于target的時候,窗口要收縮,計算子數組的長度,并及時更新最小的長度,左窗口右移。 class Solution:def minSubArrayLen(self,…

Python字典的查詢操作

一、前言 在 Python 中,字典(dict) 是一種非常常用的數據結構,以鍵值對(Key-Value Pair)形式存儲數據,支持快速查找、插入和刪除操作。 本文將系統性地介紹 Python 字典中常見的查詢操作方法&…

pyhton基礎【18】面向對象基礎一

目錄 一.面向對象 二.面向對象概述 三.類與對象 一.面向對象 Python中的面向對象編程OOP是一種編程范式,它使用對象來設計軟件。對象是具有屬性(稱為屬性)和可以執行的操作(稱為方法)的數據結構。 基礎概念 類:class 類是創建對象的藍圖或模板。它…

Requests源碼分析:面試考察角度自驗(初級)

簡單描述執行流程 Q:能簡單描述一下發送一個requests.get(url)請求時,在requests庫內部的主要執行流程嗎?(從調用get方法到收到響應) 入口委托: get() 方法內部調用 requests.request(GET, url)。Session 接管: request() 方法會獲取或隱式創建一個 Session 對象,并調用…

鴻蒙5:條件-循環-列表渲染

注意:博主有個鴻蒙專欄,里面從上到下有關于鴻蒙next的教學文檔,大家感興趣可以學習下 如果大家覺得博主文章寫的好的話,可以點下關注,博主會一直更新鴻蒙next相關知識 專欄地址: https://blog.csdn.net/qq_56760790/…

淺談AI大模型-MCP

MCP簡介 MCP(Model Context Protocol,模型上下文協議 ),24年11月初的時候Anthropic發了一篇技術博客,推出了他們的模型上下文協議MCP,介紹了一種規范:應用如何為LLM提供上下文。官網稱MCP為AI應…

MySQL數據庫基礎概述

前言: MySQL作為全球應用最廣泛的開源關系型數據庫管理系統(RDBMS)?,憑借其高性能、高可靠性與零成本特性,已成為Web應用、企業系統的核心數據引擎。它遵循SQL標準,通過表結構實現數據的結構化存儲&#x…

桌面小屏幕實戰課程:DesktopScreen 16 HTTP

飛書文檔http://https://x509p6c8to.feishu.cn/docx/doxcnrxBs55qGn6xoysTcJpqwRf /home/kemp/work/esp/esp-idf/examples/protocols/http_request 源碼下載方式參考: 源碼下載方式 心知天氣 注冊賬號,申請產品,獲取密鑰 產品 天氣數據 H…

vs2019 + QT下 vs2019創建的項目打開ui文件失敗

問題: 在vs2019 QT模式下。使用2019創建工程后。點擊ui文件打開時。出現奔潰,如下圖 解決方式: ui文件->右鍵->打開方式->添加->程序->點擊三個點->qcreator(qt安裝目錄) ->設置為默認值->確定 點擊設置為默認值,點…

WPS之PPT鏤空效果實現

1、準備一張圖片,剪切存入剪貼板 2、把圖片設為背景 右鍵 》 設置背景格式 》 圖片或紋理填充 》 圖片填充選擇剪貼板 3、插入一個矩形覆蓋全圖,設置無線條漸變填充從左到右 4、插入圓角矩形 5、單擊小黃點調整弧度 6、選擇無線條幻燈片背景填充 7、插…

服務注冊中心的本質抉擇:從業務本質看AP與CP的終極之選

本文從服務注冊中心的本質職責出發,通過分析其核心功能、業務場景和技術約束,深入探討服務注冊中心在架構設計上應該優先保證AP還是CP特性。文章首先剖析服務注冊中心的根本使命,然后從分布式系統原理、生產實踐案例和性能表現三個維度進行對…

mybatis-plus從入門到入土(一):快速開始

? 朋友們, 大家好, 從今天開始我想開一個系列博客。名字起的比較隨意就叫Mybatis-Plus從入門到入土, 這系列博客的定位是從基礎使用開始, 然后逐步深入全面的了解Mybatis-Plus框架, 寫這個博客的主要原因是工作中經常用到Mybatis-Plus框架, 因而對這個框架相對比較了解一些, 順…

如何快速將iPhone中的文本保存到電腦上

您的 iPhone 上是否有很多重要的短信,并且您想將短信備份到計算機上?我們都知道傳輸消息與傳輸照片不同,但幸運的是,您可以使用相關的工具和方法來實現。我們介紹了 4 種方法來解釋如何將 iPhone 中的文本保存到計算機。所有的辦法…