WPF 3D圖形編程核心技術解析

一、三維坐標系系統

WPF采用右手坐標系系統,空間定位遵循:
X 軸 → 右 Y 軸 → 上 Z 軸 → 觀察方向 X軸 \rightarrow 右\quad Y軸 \rightarrow 上\quad Z軸 \rightarrow 觀察方向 XYZ觀察方向
三維坐標值表示為 ( x , y , z ) (x, y, z) (x,y,z),旋轉角度使用歐拉角體系。當進行三維變換時,遵循矩陣組合規律:
M t r a n s f o r m = M t r a n s l a t i o n × M r o t a t i o n × M s c a l e M_{transform} = M_{translation} \times M_{rotation} \times M_{scale} Mtransform?=Mtranslation?×Mrotation?×Mscale?

在這里插入圖片描述

二、視口與攝像機

如果使用3D內容,就需要有容器來包含3D內容。這個容器是Viewport3D類,該類位
于System.Windows.Controls名稱空間。Viewport3D類繼承自FrameworkElement類,所以它可
以放到能夠放置正常元素的任何地方。例如,可以使用它作為窗口或頁面的內容,也可以將它
放到更復雜的布局中。
Viewport3D類只應用于復雜的3D編程。它常用的兩個屬性——Camera和Children

  • Camera屬性 定義了3D場景的觀察者(相機)
  • Children屬性包含了希望放在場景中的所有3D對象。

當然,照亮3D場景的光源本身也是視口中的一個對象。

  1. Viewport3D容器結構代碼
 <Viewport3D x:Name="viewport3D"><!--相機--><Viewport3D.Camera><PerspectiveCamera Position="100,100,100" LookDirection="-100,-100,-100" UpDirection="0,0,1" FieldOfView="10"><PerspectiveCamera.Transform><RotateTransform3D CenterX="0" CenterY="0" CenterZ="0"><RotateTransform3D.Rotation><!--視野可以繞物體中心軸旋轉--><AxisAngleRotation3D Axis="0 0 1" Angle="180"/></RotateTransform3D.Rotation></RotateTransform3D></PerspectiveCamera.Transform></PerspectiveCamera></Viewport3D.Camera><!--光源 離散的白色光源--><ModelVisual3D><ModelVisual3D.Content><Model3DGroup><AmbientLight Color="#999" /><!--點光源-光影層次感--><PointLight Color="#DDD" Position="100,0,100"/></Model3DGroup></ModelVisual3D.Content></ModelVisual3D><!--模型--><ModelVisual3D><ModelVisual3D.Content><Model3DGroup><GeometryModel3D><GeometryModel3D.Material><DiffuseMaterial Brush="Orange"/></GeometryModel3D.Material><GeometryModel3D.BackMaterial><DiffuseMaterial Brush="Orange"/></GeometryModel3D.BackMaterial><GeometryModel3D.Geometry><MeshGeometry3D Positions="2.5,0,0.5 -2.5,0,0.5 2.5,2,0.5 -2.5,2,0.52.5,0,0 -2.5,0,0 2.5,2,0 -2.5,2,0"TriangleIndices="0,2,1 1,2,3"/></GeometryModel3D.Geometry></GeometryModel3D></Model3DGroup></ModelVisual3D.Content></ModelVisual3D></Viewport3D>

運行效果

在這里插入圖片描述

注意:
在Viewport3D類的繼承屬性中,有一個屬性特別重要:ClipToBounds。如果將該屬性設置
為true(默認值),超出視口邊界的內容將被剪裁掉。如果設置為false,內容會顯示在相鄰元素
的上面。這種行為和Canvas控件的ClipToBounds屬性的行為相同。然而,當使用Viewport3D
類時有如下重要的區別:性能。如果將Viewport3D.ClipToBounds屬性設置為false,當渲染復
雜的、頻繁更新的3D場景時,可顯著提高性能。

  1. 攝像機類型對比
  • PerspectiveCamera(透視投影)
<PerspectiveCamera Position="0,0,5" LookDirection="0,0,-1" UpDirection="0,1,0"FieldOfView="60"/>
  • OrthographicCamera(正交投影)
<OrthographicCameraPosition="0,0,5"LookDirection="0,0,-1"Width="10"/>
三、光照體系
光照類型特點適用場景
AmbientLight均勻環境光基礎照明
DirectionalLight平行光源(類似太陽光)主體照明
PointLight點光源(球狀衰減)局部照明
SpotLight聚光燈(錐形照射)特殊效果
<ModelVisual3D><ModelVisual3D.Content><DirectionalLight Color="White" Direction="-1,-1,-1"/></ModelVisual3D.Content>
</ModelVisual3D>
四、幾何模型構建
  1. MeshGeometry3D核心屬性
var geometry = new MeshGeometry3D {Positions = new Point3DCollection {new Point3D(-1,1,1),  // 頂點坐標集合new Point3D(1,1,1),// ...其他頂點},TriangleIndices = new Int32Collection {0,1,2,  // 三角形索引2,3,0,// ...其他面},TextureCoordinates = new PointCollection {new Point(0,0),  // 紋理坐標new Point(1,0),// ...其他貼圖坐標}
};
  1. 材質與著色器
<GeometryModel3D.Material><MaterialGroup><DiffuseMaterial Brush="Blue"/><SpecularMaterial Brush="White" SpecularPower="20"/></MaterialGroup>
</GeometryModel3D.Material>
五、WPF3D中常見的幾個類
類名說明
Viewport3D定義了用于渲染3D對象的表面。它作為容器包含所有3D繪圖的可見元素,是創建3D場景的基礎組件。
ModelVisual3D包含在Viewport3D中,負責展示3D模型的所有可見部分。支持對整個模型應用變換操作(如旋轉、縮放和移動),以便調整模型在3D空間中的位置和方向。
GeometryModel3DModelVisual3D的一個具體實現,用于定義3D模型的具體外觀。它不僅包含幾何形狀(通過MeshGeometry3D定義),還包含了材質信息,以確定模型的顏色和紋理等視覺屬性。
Geometry3D抽象基類,提供了定義幾何形狀的基本框架。它的具體實現MeshGeometry3D允許用戶通過指定三角形的位置來構建復雜的3D模型。
Material抽象基類,用于定義應用于MeshGeometry3D上的材質屬性,影響3D模型的外觀。包括EmissiveMaterial(自發光)、DiffuseMaterial(漫反射光)、SpecularMaterial(鏡面反射光)等,以及可以通過MaterialGroup將多種材質組合使用。
Light抽象基類,提供基礎照明功能。其子類包括AmbientLight(環境光,無方向性)、DirectionalLight(定向光源,模擬太陽光)、PointLight(點光源,從一個點向四周均勻發光)和SpotLight(聚光燈,發出錐形光線)。這些光源共同作用,為3D場景提供逼真的光照效果。
Camera抽象基類,用于控制3D場景如何投影到2D顯示表面上。PerspectiveCamera模擬人眼視角,遠處物體顯得更小;OrthographicCamera不考慮距離因素,適用于技術制圖;而MatrixCamera則允許更靈活地設置視圖轉換矩陣。
Transform3D抽象基類,提供對3D對象進行變換的能力。包括TranslateTransform3D(位移變換)、ScaleTransform3D(縮放變換)、RotateTransform3D(旋轉變換)、MatrixTransform3D(基于矩陣的變換)和Transform3DGroup(組合多個變換)。

通過合理運用坐標系系統、攝像機配置、光照方案和材質組合,開發者可以構建出具有專業級表現力的三維交互界面。建議通過實際調試不同參數組合來深入理解各元素的視覺影響。

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

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

相關文章

【庫(Library)、包(Package)和模塊(Module)解析】

在Python中&#xff0c;**庫&#xff08;Library&#xff09;、包&#xff08;Package&#xff09;和模塊&#xff08;Module&#xff09;**是代碼組織的不同層級&#xff0c;而import語句的導入行為與它們密切相關。以下是詳細對比和解釋&#xff1a; &#x1f4e6; 1. 核心概…

裸機上的 printf:在無操作系統環境下構建 C 標準庫

在嵌入式開發和底層系統編程領域&#xff0c;裸機開發是一項極具挑戰性但又至關重要的任務。想象一下&#xff0c;在沒有操作系統支持的情況下&#xff0c;讓 C 語言的標準庫函數&#xff0c;如printf正常工作&#xff0c;這聽起來是不是很有趣又充滿挑戰&#xff1f;今天&…

基于STM32F103的智能機械臂識別與控制項目(課件PPT+源代碼)

以下是基于 STM32F103 的智能機械臂識別與控制項目的詳細介紹&#xff1a; 項目概述 該項目以 STM32F103 為核心控制器&#xff0c;結合多種傳感器和技術&#xff0c;實現了機械臂的智能識別與控制功能&#xff0c;可完成倉庫貨物的識別、搬運等任務&#xff0c;并支持多種控…

Codeforces Round 1023 (Div. 2)

Dashboard - Codeforces Round 1023 (Div. 2) - Codeforces 一個構造問題&#xff0c;我把最大的數放在一個數組&#xff0c;其余數放在另一個數組&#xff0c;就能保證gcd不同 來看代碼&#xff1a; #include <bits/stdc.h> using namespace std;int main() {int t;ci…

6.01 Python中打開usb相機并進行顯示

本案例介紹如何打開USB相機并每隔100ms進行刷新的代碼,效果如下: 一、主要思路: 1. 打開視頻流、讀取幀 self.cam_cap = cv2.VideoCapture(0) #打開 視頻流 cam_ret, cam_frame = self.cam_cap.read() //讀取幀。 2.使用定時器,每隔100ms讀取幀 3.顯示到Qt的QLabel…

JVM——即時編譯

分層編譯模式&#xff1a;動態平衡啟動速度與執行效率 分層編譯是現代JVM&#xff08;如HotSpot、GraalVM&#xff09;實現高性能的核心策略之一&#xff0c;其核心思想是根據代碼的執行熱度動態選擇不同的編譯層次&#xff0c;實現啟動速度與運行效率的最佳平衡。以HotSpot虛…

Auto DOP:讓并行執行實現智能調優 | OceanBase 實踐

隨著數據量的迅速增長&#xff0c;企業數據庫往往面臨著一個困局&#xff1a;復雜的分析查詢需要充分的資源來保證性能&#xff0c;但過多增加并行執行又會造成資源競爭&#xff0c;影響系統穩定性。傳統基于DBA人工干預的并行度調節機制&#xff0c;既低效又難以適應動態變化的…

【區塊鏈】Uniswap之滑點(Slippage)

一、滑點是什么&#xff1f; 滑點&#xff08;Slippage&#xff09;是指你下單預期價格和最終成交價格之間的差距。 在 DEX 中&#xff0c;你的交易會影響池子的價格&#xff08;AMM機制&#xff09;&#xff0c;所以&#xff1a; 下單越大&#xff0c;滑點越大&#xff1b;…

[前端]Javascript獲取元素寬度

元素寬度屬性對比示意圖 ---------------------------------- | 外邊距&#xff08;margin&#xff09; | -------------------------------- | | 邊框&#xff08;border&#xff09; | | | -------------------------- | | | …

數字人驅動/動畫方向最新頂會期刊論文收集整理 | AAAI 2025

會議官方論文列表&#xff1a;https://ojs.aaai.org/index.php/AAAI/issue/view/624 以下論文部分會開源代碼&#xff0c;若開源&#xff0c;會在論文原文的摘要下方給出鏈接。 語音驅動頭部動畫/其他 EchoMimic: Lifelike Audio-Driven Portrait Animations through Editabl…

Windows系統下【Celery任務隊列】python使用celery 詳解(一)

Celery 是一個基于 Python 的分布式任務隊列框架&#xff0c;它允許你在不同的進程甚至不同的服務器上異步執行任務。 特點 簡單&#xff1a;易于使用和配置&#xff0c;提供了簡潔的 API。高可用&#xff1a;支持任務的可靠交付&#xff0c;即使在出現故障時也能保證任務不丟…

移動設備常用電子屏幕類型對比

概述 LCD 家族 &#xff08;TN、STN、TFT、IPS、VA&#xff09;依賴背光&#xff0c;性能差異主要來自液晶排列和驅動方式。OLED 以自發光為核心優勢&#xff0c;但成本與壽命限制其普及。E-Paper 專為低功耗靜態顯示設計&#xff0c;與傳統屏幕技術差異顯著。 參數LCD&#…

Vue3.5 企業級管理系統實戰(十八):用戶管理

本篇主要探討用戶管理功能&#xff0c;接口部分依然是使用 Apifox mock 模擬。 1 用戶 api 在 src/api/user.ts 中添加用戶相關 CRUD 接口&#xff0c;代碼如下&#xff1a; //src/api/user.ts import request from "/api/config/request"; // 從 "./type&q…

【C】初階數據結構14 -- 歸并排序

本篇文章主要是講解經典的排序算法 -- 歸并排序 目錄 1 遞歸版本的歸并排序 1&#xff09; 算法思想 2&#xff09; 代碼 3&#xff09; 時間復雜度與空間復雜度分析 &#xff08;1&#xff09; 時間復雜度 &#xff08;2&#xff09; 空間復雜度 2 迭代版本的歸并…

【相機標定】OpenCV 相機標定中的重投影誤差與角點三維坐標計算詳解

摘要&#xff1a; 本文將從以下幾個方面展開&#xff0c;結合典型代碼深入解析 OpenCV 中的相機標定過程&#xff0c;重點闡述重投影誤差的計算方法與實際意義&#xff0c;并通過一個 calcBoardCornerPositions() 函數詳細講解棋盤格角點三維坐標的構建邏輯。 在計算機視覺領域…

RabbitMQ-運維

文章目錄 前言運維-集群介紹多機多節點單機多節點 多機多節點下載配置hosts?件配置Erlang Cookie啟動節點構建集群查看集群狀態 單機多節點安裝啟動兩個節點再啟動兩個節點驗證RabbitMQ啟動成功搭建集群把rabbit2, rabbit3添加到集群 宕機演示仲裁隊列介紹raft算法協議 raft基…

JVM之內存管理(一)

部分內容來源&#xff1a;JavaGuide二哥Java 圖解JVM內存結構 內存管理快速復習 棧幀&#xff1a;局部變量表&#xff0c;動態鏈接&#xff08;符號引用轉為真實引用&#xff09;&#xff0c;操作數棧&#xff08;存儲中間結算結果&#xff09;&#xff0c;方法返回地址 運行時…

無線射頻模塊如何通過CE RED認證?關鍵規范與準備策略詳解

隨著無線通信設備在歐洲市場的廣泛應用&#xff0c;CE RED認證已成為模塊類產品進入歐盟的強制通行證。作為專注于LoRa模塊、對講模塊與FSK射頻模塊研發的技術企業&#xff0c;我們深知從設計、測試到量產&#xff0c;每一個環節都需緊扣合規底線。本文將圍繞CE RED認證核心要求…

Golang中集合相關的庫

一切編程語言的底層結構都是數組&#xff0c;其它復雜數據結構如Map, Stack&#xff0c;Heap和Queue都是基于數組建立起來的。 Go語言主流工具庫推薦&#xff08;含常用數據結構實現&#xff09; 以下是目前Go生態中最主流且活躍的工具庫&#xff0c;包含隊列、棧、優先級隊列…

ABAP 導入Excel形成內表

文章目錄 創建導入模板程序實現代碼代碼解析運行結果 創建導入模板 程序實現 代碼 *&---------------------------------------------------------------------* *& Report Z_EXCEL_UPLOAD_LHY *&--------------------------------------------------------------…