前言

本专栏是基于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;它描述了不同强度值在图像中出现的频率。图像直…