WPF實現簡單的3D圖形

簡述
Windows 演示基礎 (WPF) 提供了一種功能,用于根據應用程序要求繪制、轉換 3D 圖形并為其添加動畫效果。它不支持完整的3D游戲開發,但在某種程度上,您可以創建3D圖形。
通過組合 2D 和 3D 圖形,您還可以創建豐富的控件、提供復雜的數據插圖或增強應用程序界面的用戶體驗。“視口3D”元素將 3D 模型托管到我們的 WPF 應用程序中。
示例
讓我們舉一個簡單的例子來了解如何使用3D圖形。
創建一個名為 WPF3D 圖形的新 WPF 項目。
以下 XAML 代碼演示如何使用 3D 幾何圖形創建 2D 對象。

<Window x:Class = "WPF3DGraphics.MainWindow" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local = "clr-namespace:WPF3DGraphics" mc:Ignorable = "d" Title = "MainWindow" Height = "500" Width = "604"> <Grid> <Viewport3D> <Viewport3D.Camera> <PerspectiveCamera Position = "2,0,10" LookDirection = "0.2,0.4,-1"FieldOfView = "65" UpDirection = "0,1,0" /> </Viewport3D.Camera> <ModelVisual3D> <ModelVisual3D.Content> <Model3DGroup> <AmbientLight Color = "Bisque" /> <GeometryModel3D> <GeometryModel3D.Geometry> <MeshGeometry3D Positions = "0,0,0 0,8,0 10,0,0 8,8,0"Normals = "0,0,1 0,0,1 0,0,1 0,0,1" TriangleIndices = "0,2,1 1,2,3"/> </GeometryModel3D.Geometry><GeometryModel3D.Material> <DiffuseMaterial Brush = "Bisque" /> </GeometryModel3D.Material> </GeometryModel3D></Model3DGroup> </ModelVisual3D.Content> </ModelVisual3D> </Viewport3D> </Grid> </Window>     

當您編譯并執行上述代碼時,它將在3D中生成2D對象。

示例
讓我們l一個顯示 3D 對象的示例。
創建一個名為 WPF3D 圖形1 的新 WPF 項目
以下 XAML 代碼創建一個 3D 對象和一個滑塊。在滑塊的幫助下,您可以旋轉此 3D 對象。

<Window x:Class = "WPF3DGraphics1.MainWindow" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local = "clr-namespace:WPF3DGraphics1" mc:Ignorable = "d" Title = "MainWindow" Height = "350" Width = "525"> <Grid><Viewport3D Name="viewport3D1"><Viewport3D.Camera> <PerspectiveCamera x:Name = "camMain" Position = "6 5 4" LookDirection = "-6 -5 -4"> </PerspectiveCamera> </Viewport3D.Camera><ModelVisual3D> <ModelVisual3D.Content> <DirectionalLight x:Name = "dirLightMain" Direction = "-1,-1,-1"> </DirectionalLight> </ModelVisual3D.Content> </ModelVisual3D><ModelVisual3D x:Name = "MyModel"> <ModelVisual3D.Content> <GeometryModel3D><GeometryModel3D.Geometry><MeshGeometry3D x:Name = "meshMain"Positions = "0 0 0  1 0 0  0 1 0  1 1 0  0 0 1  1 0 1  0 1 1  0 1 1"  TriangleIndices = "2 3 1  3 1 0  7 1 3  7 5 1  6 5 7  6 4 5  6 2 02 0 4  2 7 3  2 6 7  0 1 5  0 5 4"> </MeshGeometry3D> </GeometryModel3D.Geometry> <GeometryModel3D.Material> <DiffuseMaterial x:Name = "matDiffuseMain"><DiffuseMaterial.Brush> <SolidColorBrush Color = "Bisque"/> </DiffuseMaterial.Brush> </DiffuseMaterial> </GeometryModel3D.Material> </GeometryModel3D></ModelVisual3D.Content><ModelVisual3D.Transform>                         <RotateTransform3D> <RotateTransform3D.Rotation> <AxisAngleRotation3D x:Name = "rotate" Axis = "1 2 1"/> </RotateTransform3D.Rotation> </RotateTransform3D></ModelVisual3D.Transform> </ModelVisual3D> </Viewport3D><Slider Height = "23" HorizontalMoognment = "Left"  Margin = "145,271,0,0" Name = "slider1" VerticalMoognment = "Top" Width = "269"  Maximum = "360" Value = "{Binding ElementName = rotate, Path=Angle}" /> </Grid> </Window> 

運行應用程序時,它將在窗口上生成一個 3D 對象和一個滑塊。
滑動滑塊時,窗口中的對象也將旋轉。

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

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

相關文章

Maven多環境配置與Spring Boot日志定制實戰指南

前言 在軟件開發過程中&#xff0c;根據不同的環境&#xff08;如開發、測試、生產&#xff09;調整配置和日志級別是一項常見的需求。本文將詳細介紹如何在Maven項目中使用profile來管理多環境配置&#xff0c;并結合Spring Boot項目&#xff0c;實現日志級別的靈活定制。這不…

gitlab之docker-compose漢化離線安裝

目錄 概述離線資源docker-compose結束 概述 gitlab可以去 hub 上拉取最新版本&#xff0c;在此我選擇漢化 gitlab &#xff0c;版本 11.x 離線資源 想自制離線安裝鏡像&#xff0c;請穩步參考 docker鏡像的導入導出 &#xff0c;無興趣的直接使用在此提供離線資源 百度網盤(鏈…

14-云原生監控體系-Redis_exporter 監控 MySQL[部署Dashborad告警規則實戰]

文章目錄 環境準備切片集群主從哨兵1. 部署1.1. 二進制方式1.1.1. 下載二進制包1.1.2. 部署1.2. docker-compose 容器方式1.3. 配置連接&認證參數1.3.1. 連接認證參數1.3.2. 配置服務控制 systemd2. 配置到 Prometheus3 Dashboard4. 告警規則

Go語言之GORM框架(三)——Hook(鉤子)與Gorm的高級查詢

Hook(鉤子) 和我們在gin框架中講解的Hook函數一樣&#xff0c;我們也可以在定義Hook結構體&#xff0c;完成一些操作&#xff0c;相關接口聲明如下&#xff1a; type CreateUser interface { //創建對象時使用的HookBeforeCreate() errorBeforeSave() errorAfterCreate() …

Java中的鎖機制詳解:synchronized與ReentrantLock

在Java并發編程中&#xff0c;鎖機制是確保多線程安全訪問共享資源的關鍵手段。Java提供了多種鎖機制&#xff0c;其中最為常用的兩種是synchronized關鍵字和ReentrantLock。下面我將從技術難點、面試官關注點、回答吸引力以及代碼舉例等方面對這兩種鎖機制進行詳細描述。 一、…

【C#】委托

文章目錄 委托自定義委托模板方法&#xff08;工廠模式回調(callback)函數&#xff08;觀察者模式多播&#xff08;multicast&#xff09;委托委托的高級使用使用接口 重構 模板方法代碼注意參考 委托 委托&#xff08;delegate&#xff09;是一種類型&#xff0c;定義了一種方…

實踐部署 浦語·靈筆2 模型,寫作圖文并茂的文章

1 初步介紹 XComposer2 相關知識 浦語靈筆2 是基于 書生浦語2 大語言模型研發的突破性的圖文多模態大模型&#xff0c;具有非凡的圖文寫作和圖像理解能力&#xff0c;在多種應用場景表現出色&#xff0c;總結起來其具有&#xff1a; 自由指令輸入的圖文寫作能力&#xff1a; 浦…

Android ANR Trace日志閱讀分析技巧

什么是Trace日志 Trace日志是指ANR目錄下的一份txt文件 adb pull /data/anr/traces.txt Trace日志有什么用 分析應用ANR無響應的問題&#xff0c; Trace怎么用 Cmd line: com.xx ABI: arm Build type: optimized Zygote loaded classes3682 post zygote classes3750 Intern…

uniapp - 填充頁面

在上一篇文章中&#xff0c;創建了一個空白的文章模塊頁面。在這一篇文章&#xff0c;讓我們來向頁面中填充內容。 目錄 頁面效果涉及uniapp組件1.view2.swiper3.scroll-view4.屬性解讀1) class"style1 style2 .."2) circular單屬性無賦值3) :autoplay"autoplay…

如何關閉MySQL凌晨12點自動彈窗?

要關閉 MySQL 在凌晨 12 點自動彈窗的行為&#xff0c;首先需要確定彈窗的具體原因。 打開“任務計劃程序”&#xff1a; 按 Win R&#xff0c;輸入 taskschd.msc&#xff0c;然后按 Enter。 在左側導航欄中&#xff0c;選擇“任務計劃程序庫”。 查找與 MySQL 相關的任務&…

vite構建build選項配置(2024-05-29)

build.target? 類型&#xff1a; string | string[]默認&#xff1a; modules相關內容&#xff1a; 瀏覽器兼容性 設置最終構建的瀏覽器兼容目標。默認值是一個 Vite 特有的值&#xff1a;modules&#xff0c;這是指 支持原生 ES 模塊、原生 ESM 動態導入 和 import.meta 的…

軟件構造復習的一些經驗筆記

軟件構造復習的一些經驗筆記 術語解釋 LSP原則&#xff08;里氏替換原則&#xff09; 什么是LSP原則&#xff0c;就是A類繼承B類&#xff0c;A類應該比B類的spec&#xff08;規約&#xff09;更強 換句話說&#xff1a;你爹會做魚香肉絲&#xff0c;你爹的手藝遺傳給了你&a…

基于springboot實現醫療掛號管理系統項目【項目源碼+論文說明】

基于springboot實現醫療掛號管理系統演示 摘要 在如今社會上&#xff0c;關于信息上面的處理&#xff0c;沒有任何一個企業或者個人會忽視&#xff0c;如何讓信息急速傳遞&#xff0c;并且歸檔儲存查詢&#xff0c;采用之前的紙張記錄模式已經不符合當前使用要求了。所以&…

JAVA -- 邏輯控制詳解

JAVA邏輯控制詳解 1.順序結構 按照代碼書寫的順序一行一行執行 System.out.println("123");//123 System.out.println("456");//456 System.out.println("789");//7892.分支結構 if 語句 switch 語句 2.1 if 語句 語法格式1(單分支) //if(布…

安全閥檢測周期:確定因素與操作流程詳解

在工業生產中&#xff0c;安全閥扮演著至關重要的角色&#xff0c;其性能的穩定性和準確性直接關系到設備和系統的安全。為確保安全閥的正常運行和事故防范&#xff0c;對其進行定期檢測顯得尤為關鍵。 接下來&#xff0c;佰德將深入探討安全閥檢測周期相關的內容&#xff0c;…

HTML靜態網頁成品作業(HTML+CSS)——家鄉芷江侗族自治縣介紹網頁(1個頁面)

&#x1f389;不定期分享源碼&#xff0c;關注不丟失哦 文章目錄 一、作品介紹二、作品演示三、代碼目錄四、網站代碼HTML部分代碼 五、源碼獲取 一、作品介紹 &#x1f3f7;?本套采用HTMLCSS&#xff0c;未使用Javacsript代碼&#xff0c;共有1個頁面。 二、作品演示 三、代…

【ROS機器人學習】--------1ROS工作空間和功能包創建

虛擬機工具和鏡像鏈接: https://pan.baidu.com/s/1HDmpbMESiUA2nj3qFVyFcw?pwd8686 提取碼: 8686 ROS工作空間是一個用于組織和管理ROS&#xff08;機器人操作系統&#xff09;包的目錄結構&#xff0c;它通常包含多個子目錄&#xff0c;用于存放源碼、構建文件和安裝文件。工…

香橙派OrangePI AiPro測評

實物 為AI而生 打開盒子 截圖電源開機進入 作為一個AI產品,必須有一個人機交互的界面才行。大家都在跑算法,于是我就開始進行整理著手整理搭建Qt的環境。 1、下載源碼 wget https://download.qt.io/archive/qt/5.12/5.12.12/single/qt-everywhere-src-5.12.12.tar.xz待…

RDP方式連接服務器上傳文件方法

隨筆 目錄 1. RDP 連接服務器 2. 為避免rdp 訪問界面文字不清晰 3. 本地上傳文件到服務器 1. RDP 連接服務器 # mstsc 連接服務器step1: 輸入mstscstep2: 輸入 IP, username, passwd 2. 為避免rdp 訪問界面文字不清晰 解決方法&#xff1a; 3. 本地上傳文件到服務器 step…

關于C++的特殊類定制

特殊類定制 在C中&#xff0c;一些特殊性質的類如何設計 類禁止拷貝的對象 C11 使用delete關鍵字賦值給拷貝構造和賦值C98將拷貝構造和賦值聲明在私有里 類只能在堆上創建的對象 將構造函數私有化, 提供一個獲取對象堆上創建對象的公有函數將析構函數私有化, 提供一個釋放…