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

embedded/2025/2/8 11:39:35/

 一、创建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: 

TypeScript"><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的部分一般会写成:

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

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

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

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

 四、在App组件中使用

        修改 src/App.vue: 

TypeScript"><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 为 './',确保生成的路径是相对路径
});

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


http://www.ppmy.cn/embedded/160524.html

相关文章

前端控制器模式

前端控制器模式 引言 前端控制器模式&#xff08;Front Controller Pattern&#xff09;是一种设计模式&#xff0c;旨在简化应用程序的请求处理过程。它将应用程序的所有请求统一由一个控制器处理&#xff0c;从而减少请求分发和响应的复杂性。本文将详细介绍前端控制器模式…

项目顺利交付,几个关键阶段

年前离放假还有10天的时候&#xff0c;来了一个应急项目&#xff0c; 需要在放假前一天完成一个演示版本的项目&#xff0c;过年期间给甲方领导看。 本想的最后几天摸摸鱼&#xff0c;这么一来&#xff0c;非但摸鱼不了&#xff0c;还得加班。 还在虽然累&#xff0c;但也是…

python编程-内置函数bin(),bool(),abs() ,all(),any(),ascii(),max(),min() 详解

1、bin()函数用于将整数转换为其二进制字符串表示。并返回一个以0b开头的字符串&#xff0c;表示该整数的二进制形式。 # 十进制数转换为二进制字符串 decimal_number 42 binary_string bin(decimal_number) print(f"Decimal {decimal_number} is {binary_string} in b…

开箱即用的.NET MAUI组件库 V-Control 发布了!

之前写过挺多的MAUI Sample&#xff0c;其中有很多代码可以打包成组件&#xff0c;当组件完善到一定程度&#xff0c;我会把控件封装起来放到控件库中。 今天&#xff0c;在这个仓库建立一年零八个月后&#xff0c;我觉得可以考虑将其作为开源库发布。 有很多网友在观望.NET …

保姆级教程Docker部署Zookeeper官方镜像

目录 1、安装Docker及可视化工具 2、创建挂载目录 3、运行Zookeeper容器 4、Compose运行Zookeeper容器 5、查看Zookeeper运行状态 6、验证Zookeeper是否正常运行 1、安装Docker及可视化工具 Docker及可视化工具的安装可参考&#xff1a;Ubuntu上安装 Docker及可视化管理…

修改SSH登录密码,只需要登录SSH,之后输入命令即可,这里登录使用的软件为 MobaXterm1

在登入终端之后输入命令 passwd {用户名} 即可进行修改。需要注意的是&#xff0c;输入的密码不会有星号代替&#xff0c;也不会出现明文。 如果想要修改SSH的登录端口&#xff0c;比如修改为1433&#xff0c;则只需要执行以下命令即可&#xff1a; /usr/sbin/sshd -p 1433…

【机器学习案列】基于XGBoost的睡眠时间预测

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

计算机毕业设计Python+Vue.js游戏推荐系统 Steam游戏推荐系统 Django Flask 游 戏可视化 游戏数据分析 游戏大数据 爬虫

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…