当前位置: 首页 > article >正文

基于Typescript,使用Vite构建融合Vue.js的Babylon.js开发环境

 一、创建Vite项目

        使用Vite初始化一个Vue+TypeScript项目: 

npm create vite@latest my-babylon-app -- --template vue-ts
cd my-babylon-app

        npm create vite@latest my-babylon-app -- --template vue-ts 命令用于快速创建一个基于 Vite 的 Vue + TypeScript 项目。以下分三个部分解释以下这行命令的含义:

1.npm create vite@latest

  • npm   是 Node.js 的包管理工具,用于安装和管理项目依赖。
  • create   是   npm   提供的一个命令,用于运行一个初始化脚本,通常是某个包提供的脚本。
  • vite@latest   指定要运行的初始化脚本来自   vite   包的最新版本(  latest  )。  vite   是一个现代化的前端构建工具,支持快速开发和构建。

2、my-babylon-app

        my-babylon-app是新项目的名称,也是项目目录的名称。运行命令后,  npm   会创建一个名为   my-babylon-app   的文件夹,并在其中初始化项目。

3、-- --template vue-ts  

  • --   是一个分隔符,用于将参数传递给   vite   的初始化脚本,而不是传递给   npm  。
  • --template vue-ts   是传递给   vite   的参数,指定项目模板。  vue-ts   表示使用 Vue 和 TypeScript 的模板。

        cd my-babylon-app命令是进入my-babylon-app目录,这样后面的安装的@babylonjs/core和@babylonjs/loaders都是在这个目录下安装。

 二、 安装依赖

        安装Babylon.js核心库和可选的加载器: 

npm install @babylonjs/core @babylonjs/loaders --save

        npm install @babylonjs/core @babylonjs/loaders --save   是一个用于安装 Babylon.js 核心库和加载器库的命令,并将它们添加到项目的依赖中。通过这种方式,你可以快速引入 Babylon.js 的功能,开始构建 3D 场景。 

1.   npm install  

        这是 npm 的一个基本命令,用于安装包(即模块或库)到当前项目中。它会根据指定的包名从 npm 仓库下载并安装包,并将其放在项目的   node_modules   文件夹中。

2.   @babylonjs/core  

        这是 Babylon.js 的核心库,包含了 Babylon.js 的所有基础功能,例如场景管理、渲染引擎、3D 对象(如网格、材质、相机等)的创建和操作。它是使用 Babylon.js 进行 3D 开发的基础。

3.   @babylonjs/loaders

        这是 Babylon.js 的加载器库,提供了用于加载外部资源(如 3D 模型、纹理等)的功能。例如,你可以使用它来加载   .glb  、  .gltf   等格式的 3D 模型文件。

4.   --save

        这个选项告诉 npm 将安装的包添加到项目的   package.json   文件的   dependencies   部分。这样,当你运行   npm install   时,npm 会自动安装这些依赖项,确保项目在其他环境中也能正常运行。 参考下面package.json   文件内容,注意dependencies的值包含了"@babylonjs/core": "^7.47.3"和"@babylonjs/loaders": "^7.47.3"这两行内容。

{"name": "my-babylon-app","private": true,"version": "0.0.0","type": "module","scripts": {"dev": "vite","build": "vue-tsc -b && vite build","preview": "vite preview"},"dependencies": {"@babylonjs/core": "^7.47.3","@babylonjs/loaders": "^7.47.3","vue": "^3.5.13"},"devDependencies": {"@vitejs/plugin-vue": "^5.2.1","@vue/tsconfig": "^0.7.0","typescript": "~5.7.2","vite": "^6.1.0","vue-tsc": "^2.2.0"}
}

        不过实际上从 npm 5.0.0 开始,  --save   已经成为默认行为,因此在安装依赖时是否显式添加   --save   并不会产生实际的区别。 

 三、 创建Babylon场景组件

        在 src/components 下新建 BabylonScene.vue: 

<template><canvas ref="canvas"></canvas>
</template><script lang="ts">
import { defineComponent, ref, onMounted, onUnmounted } from 'vue';
import { Engine, Scene, ArcRotateCamera, Vector3, HemisphericLight, MeshBuilder } from '@babylonjs/core';export default defineComponent({name: 'BabylonCanvas',setup() {const canvas = ref<HTMLCanvasElement | null>(null);onMounted(() => {if (!canvas.value) return;// 初始化引擎和场景const hardwareScalingLevel = 0.5;const engine = new Engine(canvas.value);engine.setHardwareScalingLevel(hardwareScalingLevel);const scene = new Scene(engine);// 创建相机const camera = new ArcRotateCamera("camera",Math.PI / 2,Math.PI / 3,10,Vector3.Zero(),scene);camera.attachControl(canvas.value, true);// 添加灯光new HemisphericLight("light", new Vector3(0.5, 1, 0), scene);// 创建立方体MeshBuilder.CreateBox("box", {}, scene);// 渲染循环engine.runRenderLoop(() => {scene.render();});// 窗口调整时重置引擎window.addEventListener('resize', () => engine.resize());// 组件卸载时清理资源onUnmounted(() => {scene.dispose();engine.dispose();});});return {canvas,};},
});
</script>

        上面代码中创建engine的部分一般会写成:

const engine = new Engine(canvas.value, true);

        其中的Engine的第二个参数true是表示应用反锯齿,但是个人感觉并不好用,所以写成了:

const hardwareScalingLevel = 0.5;
const engine = new Engine(canvas.value);
engine.setHardwareScalingLevel(hardwareScalingLevel);

         就是让渲染画面是canvas尺寸的2倍(长宽都是2倍,渲染像素就是4倍),这样得到的结果非常细腻,理论上来讲会导致Babylonjs在shader的片元着色器阶段和后期处理阶段增加负担,但暂时先以效果好优先吧。

 四、在App组件中使用

        修改 src/App.vue: 

<template><BabylonScene />
</template><script setup lang="ts">
import BabylonScene from './components/BabylonScene.vue'
</script>

 五、配置TypeScript(可选)

        如果遇到类型错误,检查 tsconfig.json 确保包含: 

{"compilerOptions": {"types": ["@babylonjs/core"]}
}

六、运行项目 

npm run dev

        访问 http://localhost:5173 查看渲染的立方体。 

七、构建项目

npm run build

        这里需要注意一下,默认情况下构建完整之后,构建的内容会保存到dist文件夹内, 其中的index.html文件中使用的目录是绝对路径,参考如下:

<script type="module" crossorigin src="/assets/index-1vlhUxn0.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-DexAqUpL.css">

        但是这里最好使用相对路径,参考如下:

<script type="module" crossorigin src="./assets/index-1vlhUxn0.js"></script>
<link rel="stylesheet" crossorigin href="./assets/index-DexAqUpL.css">

        注意路径前面多了一个  “.”  。 

        为了使用相对路径,你可以在vite.config.ts中添加如下内容:

base: './', // 设置 base 为 './',确保生成的路径是相对路径

        完整的vite.config.ts参考如下:

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';export default defineConfig({plugins: [vue()],base: './', // 设置 base 为 './',确保生成的路径是相对路径
});

 先写这么多吧,大家春节愉快!!

相关文章:

基于Typescript,使用Vite构建融合Vue.js的Babylon.js开发环境

一、创建Vite项目 使用Vite初始化一个VueTypeScript项目&#xff1a; npm create vitelatest my-babylon-app -- --template vue-ts cd my-babylon-app npm create vitelatest my-babylon-app -- --template vue-ts 命令用于快速创建一个基于 Vite 的 Vue TypeScript 项目。…...

在阿里云ECS上一键部署DeepSeek-R1

DeepSeek-R1 是一款开源模型&#xff0c;也提供了 API(接口)调用方式。据 DeepSeek介绍&#xff0c;DeepSeek-R1 后训练阶段大规模使用了强化学习技术&#xff0c;在只有极少标注数据的情况下提升了模型推理能力&#xff0c;该模型性能对标 OpenAl o1 正式版。DeepSeek-R1 推出…...

git SourceTree 使用

Source Tree 使用原理 文件的状态 创建仓库和提交 验证 再克隆的时候发发现一个问题&#xff0c;就是有一个 这个验证&#xff0c;起始很简单 就是 gitee 的账号和密码&#xff0c;但是要搞清楚的是账号不是名称&#xff0c;我之前一直再使用名称登录老是出问题 这个很简单的…...

游戏引擎学习第94天

仓库:https://gitee.com/mrxiao_com/2d_game_2 回顾上周的渲染器工作 完成一款游戏的开发&#xff0c;完全不依赖任何库和引擎&#xff0c;这样我们能够全面掌握游戏的开发过程&#xff0c;确保没有任何细节被隐藏。我们将深入探索每一个环节&#xff0c;犹如拿着手电筒翻看床…...

win32汇编环境,结构体的使用示例二

;运行效果 ;win32汇编环境,结构体的使用示例二 ;举例说明结构体的定义&#xff0c;如何访问其中的成员&#xff0c;使用assume指令指向某个结构体&#xff0c;计算结构数组所需的偏移量得到某个成员值等 ;直接抄进RadAsm可编译运行。重要部分加备注。 ;下面为asm文件 ;>>…...

DeepSeek从入门到精通教程PDF清华大学出版

DeepSeek爆火以来&#xff0c;各种应用方式层出不穷&#xff0c;对于很多人来说&#xff0c;还是特别模糊&#xff0c;有种雾里看花水中望月的感觉。 最近&#xff0c;清华大学新闻与传播学院新媒体研究中心&#xff0c;推出了一篇DeepSeek的使用教程&#xff0c;从最基础的是…...

【PDF提取内容】如何批量提取PDF里面的文字内容,把内容到处表格或者批量给PDF文件改名,基于C++的实现方案和步骤

以下分别介绍基于 C 批量提取 PDF 里文字内容并导出到表格&#xff0c;以及批量给 PDF 文件改名的实现方案、步骤和应用场景。 批量提取 PDF 文字内容并导出到表格 应用场景 文档数据整理&#xff1a;在处理大量学术论文、报告等 PDF 文档时&#xff0c;需要提取其中的关键信…...

SSA-TCN麻雀算法优化时间卷积神经网络时间序列预测未来Matlab实现

SSA-TCN麻雀算法优化时间卷积神经网络时间序列预测未来Matlab实现 目录 SSA-TCN麻雀算法优化时间卷积神经网络时间序列预测未来Matlab实现预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现SSA-TCN麻雀算法优化时间卷积神经网络时间序列预测未来&#xff08;优…...

大模型推理——MLA实现方案

1.整体流程 先上一张图来整体理解下MLA的计算过程 2.实现代码 import math import torch import torch.nn as nn# rms归一化 class RMSNorm(nn.Module):""""""def __init__(self, hidden_size, eps1e-6):super().__init__()self.weight nn.Pa…...

深度学习-神经机器翻译模型

以下为你介绍使用Python和深度学习框架Keras&#xff08;基于TensorFlow后端&#xff09;实现一个简单的神经机器翻译模型的详细步骤和代码示例&#xff0c;该示例主要处理英 - 法翻译任务。 1. 安装必要的库 首先&#xff0c;确保你已经安装了以下库&#xff1a; pip insta…...

Android Camera API 介绍

一 StreamConfigurationMap 1. StreamConfigurationMap 的作用 StreamConfigurationMap 是 Android Camera2 API 中的一个核心类&#xff0c;用于描述相机设备支持的输出流配置&#xff0c;包含以下信息&#xff1a; 支持的格式与分辨率&#xff1a;例如 YUV_420_888、JPEG、…...

大数据项目2:基于hadoop的电影推荐和分析系统设计和实现

前言 大数据项目源码资料说明&#xff1a; 大数据项目资料来自我多年工作中的开发积累与沉淀。 我分享的每个项目都有完整代码、数据、文档、效果图、部署文档及讲解视频。 可用于毕设、课设、学习、工作或者二次开发等&#xff0c;极大提升效率&#xff01; 1、项目目标 本…...

Windows逆向工程入门之汇编环境搭建

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 Visual Studio逆向工程配置 基础环境搭建 Visual Studio 官方下载地址安装配置选项(后期可随时通过VS调整) 使用C的桌面开发 拓展可选选项 MASM汇编框架 配置MASM汇编项目 创建新项目 选择空…...

gc buffer busy acquire导致的重大数据库性能故障

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验 Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯…...

前端学习-页面加载事件和页面滚动事件(三十二)

目录 前言 页面加载事件和页面滚动事件 页面加载事件 load事件 语法 注意 DOMContentLoaded事件 语法 总结 页面加载事件有哪两个?如何添加? load 事件 DOMContentLoaded事件 页面滚动事件 存在原因 scroll监听整个页面滚动 页面滚动事件-获取位置 scrollLef…...

C++:将函数参数定义为const T的意义

C++很多函数的参数都会定义为const T&,那么这么做的意义是什么呢? 避免拷贝:通过引用传递参数而不是值传递,可以避免对象的拷贝,从而提高性能,特别是当对象较大时。 保护数据:使用const关键字可以防止函数修改传入的参数,确保数据的安全性和一致性。 对于保护数据这…...

Formily 如何进行表单验证

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

安宝特方案 | AR眼镜:远程医疗的“时空折叠者”,如何为生命争夺每一分钟?

行业痛点&#xff1a;当“千里求医”遇上“资源鸿沟” 20世纪50年代&#xff0c;远程会诊的诞生曾让医疗界为之一振——患者不必跨越山河&#xff0c;专家无需舟车劳顿&#xff0c;一根电话线、一张传真纸便能架起问诊的桥梁。然而&#xff0c;传统远程医疗的局限也日益凸显&a…...

使用git commit时‘“node“‘ 不是内部或外部命令,也不是可运行的程序

第一种&#xff1a; 使用git commit -m "xxx"时会报错&#xff0c;我看网上的方法是在命令行后面添加--no-verify&#xff1a;git commit -m "主题更新" --no-verify&#xff0c;但是不可能每次都添加。 最后解决办法是&#xff1a;使用git config --lis…...

Python分享20个Excel自动化脚本

在数据处理和分析的过程中&#xff0c;Excel文件是我们日常工作中常见的格式。通过Python&#xff0c;我们可以实现对Excel文件的各种自动化操作&#xff0c;提高工作效率。 本文将分享20个实用的Excel自动化脚本&#xff0c;以帮助新手小白更轻松地掌握这些技能。 1. Excel单…...

nodejs - vue 视频切片上传,本地正常,线上环境导致磁盘爆满bug

nodejs 视频切片上传&#xff0c;本地正常&#xff0c;线上环境导致磁盘爆满bug 原因&#xff1a; 然后在每隔一分钟执行du -sh ls &#xff0c;发现文件变得越来越大&#xff0c;即文件下的mp4文件越来越大 最后导致磁盘直接爆满 排查原因 1、尝试将m3u8文件夹下的所有视…...

瑞友天翼应用虚拟化系统 GetPwdPolicy SQL注入漏洞复现

免责声明 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在使…...

【MySQL — 数据库基础】深入解析MySQL的聚合查询

1. 聚合查询 1.1 聚合函数 函数说明COUNT ( [DISTINCT] expr)返回查询到的数据的数量( 行数 )SUM ( [DISTINCT] expr)返回查询到的数据的总和&#xff0c;不是数字没有意义AVG ( [DISTINCT] expr)返回查询到的数据的平均值&#xff0c;不是数字没有意义MAX( [DISTINCT] expr)…...

22.3、IIS安全分析与增强

目录 IIS安全威胁分析iis安全机制iis安全增强 IIS安全威胁分析 iis是微软公司的Web服务软件&#xff0c;主要提供网页服务&#xff0c;除此之外还可以提供其他服务&#xff0c;第一个最主要的是网页服务&#xff0c;第二个是SMTP邮件服务&#xff0c;第三个是FTP文件传输服务。…...

windows平台本地部署DeepSeek大模型+Open WebUI网页界面(可以离线使用)

环境准备: 确定部署方案请参考:DeepSeek-R1系列(1.5b/7b/8b/32b/70b/761b)大模型部署需要什么硬件条件-CSDN博客 根据本人电脑配置:windows11 + i9-13900HX+RTX4060+DDR5 5600 32G内存 确定部署方案:DeepSeek-R1:7b + Ollama + Open WebUI 1. 安装 Ollama Ollama 是一…...

港中文腾讯提出可穿戴3D资产生成方法BAG,可自动生成服装和配饰等3D资产如,并适应特定的人体模型。

今天给大家介绍一种名为BAG&#xff08;Body-Aligned 3D Wearable Asset Generation&#xff09;的新方法&#xff0c;可以自动生成可穿戴的3D资产&#xff0c;如服装和配饰&#xff0c;以适应特定的人体模型。BAG方法通过构建一个多视图图像扩散模型&#xff0c;生成与人体对齐…...

【人工智能】Python中的序列到序列(Seq2Seq)模型:实现机器翻译

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 序列到序列(Seq2Seq)模型是自然语言处理(NLP)中一项核心技术,广泛应用于机器翻译、语音识别、文本摘要等任务。本文深入探讨Seq2Seq模…...

34.日常算法

1.合并区间 题目来源 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#x…...

DeepSeek深度思考:客户端(Android/iOS)架构设计指南

目标读者&#xff1a;中高级开发者、架构师 适用场景&#xff1a;大型复杂应用开发、跨团队协作、长期维护迭代 一、架构设计核心原则 1.模块化&#xff08;Modularization&#xff09; 横向拆分&#xff1a;按功能边界划分&#xff08;如登录、支付、消息模块&#xff09;纵向…...

2025 年前端开发现状分析:卷疯了还是卷麻了?

一、前端现状&#xff1a;框架狂飙&#xff0c;开发者崩溃 如果你是个前端开发者&#xff0c;那么你大概率经历过这些场景&#xff1a; 早上打开 CSDN&#xff08;或者掘金&#xff0c;随便&#xff09;&#xff0c;发现又有新框架发布了&#xff0c;名字可能是 VueXNext.js 之…...