<tauri><threejs><rust><GUI>基于tauri和threejs,實現一個3D圖形瀏覽程序

前言

本專欄是基于rust和tauri,由于tauri是前、后端結合的GUI框架,既可以直接生成包含前端代碼的文件,也可以在已有的前端項目上集成tauri框架,將前端頁面化為桌面GUI。

發文平臺

CSDN

環境配置

系統:windows 10
平臺:visual studio code
語言:rust、javascript
庫:tauri2.0

概述

本文是基于tauri和threejs,將threejs創建的3D畫面在tauri的窗口中呈現。
在這里插入圖片描述
本文的實現其實非常簡單,threejs本身就可以在瀏覽器渲染3D圖像,而tauri則可以結合前后端,將瀏覽器的頁面顯示在窗口中。

1、新建tauri項目

可以參考筆者之前的項目:
<Rust><GUI>rust語言GUI庫tauri體驗:前、后端結合創建一個窗口并修改其樣式
或者參考tauri官網的手冊:
https://tauri.app/zh-cn/start/create-project/

本文就不再贅述新建項目的相關內容了,我們假設已經創建完成,我們在public文件夾中新建一個網頁three.html,添加一個div:

<div class="container"><h1>threejs 3D演示</h1><div id="threejs-view"><canvas id="threejs-canvas"></canvas></div>
</div>

然后,我們在main.js中獲取html并顯示:

async function loadhtml(htmlpath,div){const response = await fetch(htmlpath);const template = await response.text();document.querySelector(div).innerHTML = template;}await loadhtml('../public/three.html','#app');

在這里插入圖片描述

2、使用threejs顯示3D

然后,我們需要使用threejs來實現3D圖像的顯示:

import * as THREE from "three";
import {OrbitControls} from 'three/addons/controls/OrbitControls.js';
import { GUI } from 'three/addons/libs/lil-gui.module.min.js';
//const view = document.getElementById('threejs-view');
const canvas = document.getElementById('threejs-canvas');
//
let scene,camera,renderer,group;
async function loadProcess(){initThreeJs();
}function initThreeJs(){scene = new THREE.Scene();camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );renderer = new THREE.WebGLRenderer({antialias:true,canvas});const w1 = canvas.clientWidth;const h1 = canvas.clientHeight;renderer.setSize( w1, h1 );//renderer.setSize( window.innerWidth, window.innerHeight );//canvas.appendChild(renderer.domElement);//const geometry = new THREE.SphereGeometry( 1.5, 32, 16,0,Math.PI*2,0,Math.PI );group = new THREE.Group();//線材質const lineMaterial = new THREE.LineBasicMaterial( { color: '#55aaff', transparent: true, opacity: 0.5 ,});//光材質group.add(new THREE.LineSegments(geometry,lineMaterial));const meshMaterial = new THREE.MeshPhongMaterial( { color: '#25b0f5', emissive: '#072534', side: THREE.DoubleSide, flatShading: true ,});group.add(new THREE.Mesh( geometry, meshMaterial ) );scene.add(group);//// 從上方照射的白色平行光,強度為 0.5。const lights = [];lights[ 0 ] = new THREE.DirectionalLight( 0xffffff, 3 );lights[ 1 ] = new THREE.DirectionalLight( 0xffffff, 3 );lights[ 2 ] = new THREE.DirectionalLight( 0xffffff, 3 );lights[ 0 ].position.set( 0, 200, 0 );lights[ 1 ].position.set( 100, 200, 100 );lights[ 2 ].position.set( - 100, - 200, - 100 );scene.add( lights[ 0 ] );scene.add( lights[ 1 ] );scene.add( lights[ 2 ] );//const controls = new OrbitControls( camera, renderer.domElement );camera.position.z = 5;controls.update();//function animate(){group.rotation.x += 0.005;group.rotation.y += 0.005;requestAnimationFrame(() => animate());renderer.render(scene, camera);}animate();}loadProcess();

我們來看下上面代碼運行后的演示:
在這里插入圖片描述

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

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

相關文章

C++基礎之指針

文章目錄 指針介紹 C指針的定義與用法指針的定義指針的基本操作指針的常見用法1. 動態內存分配2. 指針與數組3. 指針作為函數參數&#xff08;傳址調用&#xff09;4. 函數返回指針 特殊指針類型智能指針&#xff08;C11起&#xff09;2.入門代碼3.總結 指針介紹 C指針的定義與…

基于存儲過程的MySQL自動化DDL同步系統設計

在現代SaaS與微服務架構中&#xff0c;數據庫結構的自動化管理成為保障系統迭代效率與數據一致性的關鍵一環。本文將圍繞如何通過 MySQL 存儲過程構建一個自動建表、字段同步、索引維護、錯誤日志記錄于一體的 DDL 自動同步系統&#xff0c;提供一套完整的工程化實現方案。 一…

【cmake學習】添加庫文件

文章目錄 目的一、原理二、步驟1.修改CMakeList2.main函數如下3.編譯運行 目的 上一篇 學習了使用cmake 構建多源文件工程在項目開發工程中&#xff0c;一般都會生成庫文件或者調用其它的一些庫文件&#xff0c;所以我們要學習一下簡單生成和使用庫文件這里主要介紹 add_libra…

Docker容器化部署實戰:Spring Boot + MySQL + Nginx 一鍵部署完整指南

?? 前言 容器化技術已經成為現代軟件部署的標準實踐。作為一名DevOps工程師,我在過去幾年中參與了數十個項目的容器化改造,深刻體會到Docker在提升部署效率、環境一致性和運維便利性方面的巨大價值。 今天我將通過一個完整的實戰案例,詳細展示如何使用Docker部署一個包含…

分布式選舉算法<一> Bully算法

分布式選舉算法詳解&#xff1a;Bully算法 引言 在分布式系統中&#xff0c;節點故障是不可避免的。當主節點&#xff08;Leader&#xff09;發生故障時&#xff0c;系統需要快速選舉出新的主節點來保證服務的連續性。Bully算法是一種經典的分布式選舉算法&#xff0c;以其簡…

高效調試 AI 大模型 API:用 Apipost 實現 SSE 流式解析與可視化

借助 AI 大模型的實時接口&#xff08;如 OpenAI GPT 或其他第三方模型 API&#xff09;&#xff0c;開發者可以通過 SSE&#xff08;Server-Sent Events&#xff09;流式處理數據&#xff0c;實時獲取模型的逐步輸出。這一技術已廣泛應用于實時問答、代碼生成等領域。本文將基…

【網絡產品經營】園區網絡

園區網絡的產品經營邏輯發生顯著變化&#xff0c;從傳統的“連接功能”導向轉向“業務體驗驅動”&#xff0c;并結合行業場景化需求、技術架構革新及智能化能力提升&#xff0c;形成多維度的產品策略升級。 一、技術架構變革&#xff1a;從多層復雜到極簡全光 傳統架構的瓶頸與…

EasyExcel 4.X 讀寫數據

文章目錄 EasyExcel與SpringBoot集成讀數據讀取數據的流程定義實體類簡單讀取自定義監聽器 讀取指定sheet和所有sheet多行頭讀取數據格式轉換列表數據實體類自定義轉換器自定義監聽器數據讀取 寫數據簡單數據寫出存儲到磁盤返回前端下載 寫出指定列寬&#xff0c;和數值精度丟失…

JVM內存管理<一>:Java內存異常問題排查

一、 內存溢出問題的排查 1. 使用工具 - jdk自帶 jmapvisualvm 2. 流程 堆轉儲&#xff1a; (1) 方法一&#xff1a;程序運行時&#xff0c;采用&#xff1a;jmap -dump:formatb,filed:\\data\\xxlJob.hprof 23300 進行堆文件的轉儲 (2) 方法二&#xff1a;在內存溢出的時候…

Android中Glide.with().load().into() 應付面試源碼解析

1. with(this)&#xff1a;生命周期綁定 Glide.with(Activity/Fragment/Context) 核心機制&#xff1a;創建與 UI 生命周期綁定的 RequestManager 底層實現&#xff1a; 通過 RequestManagerRetriever 獲取單例 非 Application 上下文&#xff1a; 向 Activity/Fragment 添加…

#### es相關內容的索引 ####

倒排索引 結構 #### es倒排索引的結構 ####-CSDN博客 向量索引 結構應用 #### es向量檢索 的 結構及應用_es 向量 文本檢索-CSDN博客 ann算法 ann算法的種類有哪些&#xff0c;之間的區別&#xff0c;各自的適用場景-CSDN博客 地理信息索引 es地理信息索引的類型以及geo_po…

小飛電視:智能電視與移動設備的娛樂新選擇

在數字娛樂時代&#xff0c;人們對于影視內容的需求日益增長&#xff0c;不僅追求豐富多樣的節目選擇&#xff0c;還希望獲得便捷、個性化的觀看體驗。小飛電視正是這樣一款專為智能電視和移動設備設計的視頻娛樂應用&#xff0c;它憑借海量的影視資源、高清流暢的播放效果以及…

刪除node并且重裝然后重裝vue

參考第一篇文章 node.js卸載與安裝超詳細教程_node卸載重裝-CSDN博客 第二篇文章安裝vue Vue安裝與配置教程&#xff08;非常詳細&#xff09;_安裝vue-CSDN博客

基于YOLOv10算法的交通信號燈檢測與識別

目錄 一.&#x1f981; 寫在前面1.1 實現模塊劃分1.2 優化與實時性支持 二.&#x1f981; 相關技術與理論基礎2.1 各版本yolo對比2.2 YOLOv10網絡結構 三.&#x1f981; 結果分析3.1 訓練損失與驗證損失分析3.2 精確率&#xff08;Precision&#xff09;、召回率&#xff08;Re…

洪水風險圖制作全流程:HEC-RAS 與 ArcGIS 的耦合應用

技術點目錄 一、HER-RAS理論二、一維數學模型基本地形導入三、恒定流、非恒定流一維數學模型水流計算四、一維數學模型計算結果分析五、一維數學模型增設構筑物六、二維河道水動力模擬七、HEC-RAS在潰壩模型中的應用八、HEC-RAS在洪水風險圖中的應用了解更多 —————————…

視覺大語言模型未能充分利用視覺表征

視覺大語言模型未能充分利用視覺表征 FesianXu 20250612 at Wechat Search Team 前言 這兩天看到一篇新掛在arxiv上的文章 [1]&#xff0c;討論了下視覺大語言模型的視覺表征退化問題。先前的研究將VLM缺陷歸咎于視覺編碼器薄弱&#xff0c;并提出集成編碼器方案以彌補不足&am…

SSRF3 任意文件讀取

一.任意文件讀取 http://192.168.112.12/pikachu-master/vul/ssrf/ssrf_curl.php?urlfile:///etc/passwd 讀取文件使用 file://文件路徑即可&#xff0c;這里我們換協議為file&#xff0c;然后從根目錄開始讀取。 /etc/passwd 我們這樣修改完url路徑后查看結果可以看到文件內…

洛谷P3953 [NOIP 2017 提高組] 逛公園

洛谷P3953 [NOIP 2017 提高組] 逛公園 洛谷題目傳送門 題目背景 NOIP2017 D1T3 題目描述 策策同學特別喜歡逛公園。公園可以看成一張 N N N 個點 M M M 條邊構成的有向圖&#xff0c;且沒有 自環和重邊。其中 1 1 1 號點是公園的入口&#xff0c; N N N 號點是公園的出…

Vue3+TypeScript+Element Plus 表格展開行優化方案

在 Vue3 TypeScript Element Plus 項目中優化表格展開行的內存使用&#xff0c;主要從 渲染優化、數據管理 和 內存回收 三方面入手。以下是最佳實踐和完整解決方案&#xff1a; 1. 懶加載展開內容&#xff08;核心優化&#xff09; 只當行展開時才渲染內容&#xff0c;避免…

OpenCV——直方圖與匹配

直方圖與匹配 一、直方圖簡介二、直方圖統計三、直方圖比較四、直方圖均衡化五、自適應的直方圖均衡化六、直方圖反向投影七、模板匹配 一、直方圖簡介 圖像直方圖&#xff08;Histogram&#xff09;是一種頻率分布圖&#xff0c;它描述了不同強度值在圖像中出現的頻率。圖像直…