Python的3D可視化庫vedo 1-3 (visual模塊)網格對象的線和面、圖片的屬性

文章目錄

  • 4 MeshVisual
    • 4.1 線條
      • 4.1.1 線寬和顏色
      • 4.1.2 線條渲染為管
    • 4.2 曲面
      • 4.2.1 物體展示為實心或框架
      • 4.2.2 曲面插值
      • 4.2.3 面的剔除
    • 4.3 紋理
    • 4.4 相機跟隨
  • 5 ImageVisual
    • 5.1 圖片屬性
      • 5.1.1 占用內存大小
      • 5.1.2 顏色標量范圍
    • 5.2 渲染屬性
      • 5.2.1 透明度
      • 5.2.2 亮度
      • 5.2.3 對比度

visual子模塊包含了管理對象及其屬性的可視化和外觀的基類。
本文對visual模塊的2個基類 MeshVisualImageVisual封裝的方法做學習和測試。
MeshVisual是網格對象 Mesh的基類,幾乎所有的3D立體圖形都是 Mesh或是它的子類。
ImageVisualImage的基類,在需要往3D場景中放置2D圖片時會使用 Image讀取和顯示圖片。

4 MeshVisual

網格對象的可視化控制。

4.1 線條

4.1.1 線寬和顏色

c.linewidth(lw=None)
c.lw(linewidth=None)
設置或獲取網格對象邊線的線寬。

c.linecolor(lc=None)
c.lc(linecolor=None)
設置或獲取網格對象邊線的顏色。

c = vedo.Cube()
print(c.linewidth())
print(c.linecolor())

默認的線寬為1,線條顏色是黑色:

1.0
[0. 0. 0.]

4.1.2 線條渲染為管

c.render_lines_as_tubes(value=True)
可視化時,在線周圍包裹管。這個效果在線條較粗時才能明顯看到。

# 正方體的線渲染為管
c1 = vedo.Cube().wireframe().render_lines_as_tubes().lw(40)
# 正方體的線
c2 = vedo.Cube().wireframe().lw(40)
vedo.show(c1, c2, N=2)

線條渲染為管

4.2 曲面

4.2.1 物體展示為實心或框架

c.wireframe(value=True)
把網格對象表示為線框或實心的外觀。

下圖上側為實心物體,下側為用wireframe方法創建的框架物體:
實心和框架外觀

4.2.2 曲面插值

c.flat()
柵格化多邊形,不做曲面插值。
c.phong()
使用馮氏算法做曲面插值。它會在柵格化的多邊形上內插表面法線,并根據內插法線和反射模型計算像素顏色。默認是該方式。

比較二者區別:

# 柵格化
s1 = vedo.Sphere(res=10, r=0.7).flat()
# 馮氏算法插值
s2 = vedo.Sphere(res=10, r=0.7).phong()
vedo.show([(s1, vedo.Text2D("flat")), (s2, vedo.Text2D("phong"))], N=3)

2種曲面插值方式

4.2.3 面的剔除

c.backface_culling(value=True)
背面剔除。
c.frontface_culling(value=True)
正面剔除。

繪制實心的圖像時,構成圖像的多邊形,有一部分面向相機可以被看到,另一部分在背后看不到。
如一個正方體,不管相機在哪個方向,最多只能看到它的三個面。
另外三個看不到的面沒有必要繪制。將看不到的面剔除(不進行繪制),可以提高程序的效率。

背面剔除和正面剔除的原理是根據多邊形的法線相對于相機的方向進行判斷和剔除。

# 兩個正方體的透明度都是0.5
# 正常正方體
c1 = vedo.Cube(alpha=0.5)
# 背面剔除的正方體
c2 = vedo.Cube(alpha=0.5).backface_culling()
# 正面剔除的正方體
c3 = vedo.Cube(alpha=0.5).frontface_culling()vedo.show([(c1, vedo.Text2D("normal", s=2)),(c2, vedo.Text2D("backface_culling", s=2)),(c3, vedo.Text2D("frontface_culling", s=2))], N=3)

背后的多邊形本身無法被看到,只有在前面的多邊形設置透明度的時候才能發現背后的多邊形是否被繪制。
背面剔除和正面剔除
c.backcolor(bc=None)
c.bc(backcolor=None)
設置網格對象背面的顏色。
實際操作無效果。

4.3 紋理

c.texture()
為網格對象設置紋理。可以由圖片文件設置或使用預設的紋理。
參數如下:

  • tname,將被應用的紋理。填None會禁用紋理。可以填numpy數組、圖片文件路徑或vedo的Image對象。
  • tcoords=None,uv紋理坐標數組。也可以寫網格對象中現有的數組名稱。
  • interpolate=None,渲染時是否開啟紋理映射的線性插值。
  • repeat=None,是否在tcoords超過[0,1]范圍后,重復紋理。
  • edge_clamp=False,在紋理坐標超過[0,1]范圍后,是否開啟紋理環繞。只有在repeat=False且顯卡支持紋理環繞時才可以用。
  • scale=None,縮放紋理圖片;
  • ushift=None,移動紋理的U坐標;
  • vshift=None,移動紋理的V坐標;

vedo提供了17種紋理圖片,官網位置:https://vedo.embl.es/examples/data/textures/。
或者去這里下載:https://download.csdn.net/download/qq_42783188/90050775。
展示這些紋理的效果:

# 可以使用url,需要即時下載,慢
# textures_path = vedo.dataurl + 'textures/{}.jpg'
# 使用本地路徑很快
textures_path = ".../{}.jpg"
texture_list = ['gold', 'grass', 'leather', 'water', 'clouds','white', 'paper1', 'paper2', 'paper3', 'paper4','marble', 'bricks', 'wood1', 'wood2', 'wood3',# 'earth0', 'earth1',
]cubes = []
for t in texture_list:# 15種紋理使用立方體展示c = vedo.Cube().texture(textures_path.format(t))# 2種紋理使用球體展示# c = vedo.Sphere().texture(textures_path.format(t))txt = vedo.Text2D(t)cubes.append((c, txt))vedo.show(cubes, N=15).close()
# vedo.show(cubes, N=2).close()

15種紋理
2種地球紋理

4.4 相機跟隨

c.follow_camera(camera=None, origin=None)
設置物體跟隨相機移動的對象。c.follow_camera(False)可以禁用該特性。

比較兩種模式:

# 紅色的跟隨相機移動
c1 = vedo.Cube(c="red")
c1.follow_camera()
# 綠色的不跟隨相機移動
c2 = vedo.Cube(c="green")
c2.follow_camera(False)
vedo.show(c1, c2)

綠色正方體被拖拽會改變方向,紅色正方體的正面始終朝向相機。
相機跟隨


5 ImageVisual

2D圖片在場景中的可視化控制。

5.1 圖片屬性

5.1.1 占用內存大小

c.memory_size()
返回對象的內存占用大小,單位為字節。

5.1.2 顏色標量范圍

c.scalar_range()
返回圖片的標量范圍。

5.2 渲染屬性

5.2.1 透明度

c.alpha(a=None)
設置或獲取圖像在渲染時的透明度。

5.2.2 亮度

c.level(value=None)
獲取或設置圖像在渲染時的顏色亮度。

5.2.3 對比度

c.window(value=None)
獲取或設置圖像在渲染時的顏色對比度。

讀取一個紋理圖片,查看其上述屬性并展示:

img = vedo.Image(".../earth1.jpg")
print("memory_size", img.memory_size())
print("scalar_range", img.scalar_range())
print("alpha", img.alpha())
print("level", img.level())
print("window", img.window())
vedo.show(img)
memory_size 1465
scalar_range [  0. 255.]
alpha 1.0
level 127.5
window 255.0

展示2D圖片
三個屬性alphalevelwindow的效果比較:
alpha屬性
level屬性
window屬性

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

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

相關文章

19 設計模式之享元模式(電影院座位預定案例)

一、享元模式的定義 享元模式是一種結構型設計模式,它通過共享對象來支持大量細粒度的對象,減少內存消耗。享元模式的核心思想是:將對象分為共享部分和非共享部分,只有共享部分是被多個對象共享的,而非共享部分則是每個…

使用redis 的stream 做消息中間件 多線程消費消息

1.redis stream 特點 1.支持消息持久化 2.消費者組模式 3.消息確認機制 4. 消息重試機制 5. 死信隊列2. 消息生產者服務 2.1 如下代碼Service Slf4j public class StreamMessageProducer {Autowiredprivate StringRedisTemplate redisTemplate;private static final String S…

Python100道練習題

Python100道練習題 BIlibili 1、兩數之和 num1 20 num2 22result num1 num2print(result)2、一百以內的偶數 list1 []for i in range(1,100):if i % 2 0:list1.append(i) print(list1)3、一百以內的奇數 # 方法一 list1 [] for i in range(1,100):if i % 2 ! 0:lis…

Java轉C之并發和多線程

提綱&#xff1a; 概念介紹與對比概述 簡述Java與C在并發和多線程方面的核心區別解釋C11標準、POSIX、C11 <threads.h>、Pthread等名詞 Java多線程與并發回顧 線程、Runnable、ExecutorService概念說明同步關鍵字與工具類含義 C并發基礎 沒有Java式的內置線程類&#xf…

Ubuntu系統本地化搭建Maxakb+Ollama

安裝docker 最詳細的ubuntu 安裝 docker教程-騰訊云開發者社區-騰訊云 安裝Ollama Ollama官網 執行命令&#xff1a; curl -fsSL https://ollama.com/install.sh | sh安裝完成后下載模型 執行命令&#xff1a; ollama run llama3.3:70b安裝MaxKb 執行命令&#xff1a; d…

基于JAVA的旅游網站系統設計

摘要 隨著信息技術和網絡技術的迅速發展&#xff0c;人們的生活質量和觀念也在發生著改變&#xff0c;各地爭相發展旅游業&#xff0c;傳統的 旅游社已經無法滿足人們的需求&#xff0c;旅游網站將突破傳統在時間和地域的限制&#xff0c;成為方便、快捷、安全、可靠的旅游 方…

【Flux.jl】 卷積神經網絡

Flux.jl 是包含卷積神經網絡的, 但是官方API文件中沒有給出一個完整的程序框架, 只是對所需神經元給了局部解釋, 此外對 model-zoo 模型動物園中的案例沒有及時跟著 Flux.jl 的版本更新, 也無法運行出來結果。 因此本文搭建了一個完整可訓練的卷積神經網絡。 Conv 卷積算子…

H5游戲出海如何獲得更多增長機會?

海外H5小游戲的崛起給了國內眾多中小廠商出海發展的機會&#xff0c;開發者如何在海外市場獲得更多的增長機會&#xff1f;#APP出海# H5游戲如何在海外獲得核心用戶&#xff1f; HTML5游戲的開發與運營者們首先可以利用量多質高的HTML5游戲&#xff0c;維持海外用戶粘性&…

Next.js系統性教學:深入理解和應用組件組合模式

更多有關Next.js教程&#xff0c;請查閱&#xff1a; 【目錄】Next.js 獨立開發系列教程-CSDN博客 目錄 更多有關Next.js教程&#xff0c;請查閱&#xff1a; 1. 什么是組件組合模式&#xff1f; 1.1 組件組合模式概述 1.2 組件組合模式的優勢 2. Next.js 中的組件組合模式…

國際薦酒師Peter助力第六屆地博會,推動地理標志產品國際化發展

國際薦酒師Peter Lisicky助力第六屆知交會暨地博會&#xff0c;推動地理標志產品國際化發展 第六屆粵港澳大灣區知識產權交易博覽會暨國際地理標志產品交易博覽會于2024年12月9日至11日在中新廣州知識城盛大舉行&#xff0c;吸引了全球眾多行業專家、企業代表及相關機構齊聚一…

Mybatis 延遲加載的實現原理詳細解析

Mybatis 延遲加載的實現原理詳細解析 &#xff08;1&#xff09;代理對象機制的深入探討 代理對象的生成&#xff1a;Mybatis 使用代理對象來實現延遲加載是基于 Java 的代理機制。當開啟延遲加載并且配置正確后&#xff0c;對于需要延遲加載的關聯對象&#xff0c;Mybatis 會…

2024 亞馬遜云科技re:Invent:Werner Vogels架構哲學,大道至簡 六大經驗助力架構優化

在2024亞馬遜云科技re:Invent全球大會第四天的主題演講中&#xff0c;亞馬遜副總裁兼CTO Dr.Werner Vogels分享了 The Way of Simplexity&#xff0c;繁簡之道&#xff0c;濃縮了Werner在亞馬遜20年構建架構的經驗。 Werner表示&#xff0c;復雜性總是會“悄無聲息”地滲透進來…

Java Web 開發學習中:過濾器與 Ajax 異步請求

一、過濾器 Filter&#xff1a; 過濾器的概念與用途 在一個龐大的 Web 應用中&#xff0c;有許多資源需要受到保護或進行特定的預處理。過濾器就像是一位智能的守衛&#xff0c;站在資源的入口處&#xff0c;根據預先設定的規則&#xff0c;決定哪些請求可以順利訪問資源&…

ThinkPHP框架審計--基礎

基礎入門 搭建好thinkphp 查看版本方法&#xff0c;全局搜version 根據開發手冊可以大致了解該框架的路由 例如訪問url http://127.0.0.1:8094/index.php/index/index/index 對應代碼位置 例如在代碼下面添加新方法 那么訪問這個方法的url就是 http://127.0.0.1:8094/index.…

淺談Python庫之?Requests

一、?Requests的介紹 Requests 是一個簡單易用的 HTTP 庫&#xff0c;用于發送各種 HTTP 請求。它由 Kenneth Reitz 創建&#xff0c;并廣泛用于 Python 社區中。 二、?Requests的特點 1、人性化的 API&#xff1a;簡潔的接口使得編寫請求代碼變得簡單直觀。 2、跨平臺&…

如何在vue中使用ECharts

一. 打開ECharts官網,點擊快速入門 下面是ECharts官網的鏈接 https://echarts.apache.org/ 二.在vue中使用 1.首先先引入Echarts js文件 如下圖&#xff0c;下面的第一張圖片是官網的實現&#xff0c;第二章圖片是我根據官網的實現 2.給ECharts 創建一個DOM容器 3. 使用ec…

網絡原理之 IP 協議

目錄 1. IP 協議報文格式 2. 網段劃分 3. 地址管理 1) 動態分配 2) NAT 機制 (網絡地址轉換) 3) IPv6 4. 路由選擇 1. IP 協議報文格式 IP 協議是網絡層的重點協議。 網絡層要做的事情&#xff0c;主要就是兩方面&#xff1a; 1) 地址管理 制定一系列的規則&#xff…

HyperMesh CFD功能詳解:后處理功能Part 2

Clips Clips 按鈕包含兩個工具。Box Clip用于空間上的裁剪&#xff0c;Scalar Clip可以根據物理量的范圍裁剪。 示例&#xff1a;Box Clips 裁剪 示例&#xff1a;Scalar Clips 裁剪 通過裁剪&#xff0c;僅顯示density范圍是10~20的等值面 示例&#xff1a;顯示效果控制 部分透…

Java項目實戰II基于微信小程序的跑腿系統(開發文檔+數據庫+源碼)

目錄 一、前言 二、技術介紹 三、系統實現 四、核心代碼 五、源碼獲取 全棧碼農以及畢業設計實戰開發&#xff0c;CSDN平臺Java領域新星創作者&#xff0c;專注于大學生項目實戰開發、講解和畢業答疑輔導。獲取源碼聯系方式請查看文末 一、前言 在快節奏的現代生活中&…

【機器學習與數據挖掘實戰案例01】基于支持向量回歸的市財政收入分析

【作者主頁】Francek Chen 【專欄介紹】 ? ? ?機器學習與數據挖掘實戰 ? ? ? 機器學習是人工智能的一個分支&#xff0c;專注于讓計算機系統通過數據學習和改進。它利用統計和計算方法&#xff0c;使模型能夠從數據中自動提取特征并做出預測或決策。數據挖掘則是從大型數…