稀土掘金技术社区 04月21日 10:12
在失业的这一个多月里,我写了一个3D模型场景编辑器
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了作者开发的3D模型场景编辑器,该项目从开源项目threejs-3dmodel-edit演变而来,结合了商业定制需求,并对开源项目的功能进行了优化和升级。技术栈包括Vue3、TypeScript、Pinia和indexedDB,适用于企业级3D项目的开发。文章详细介绍了项目的模块化、规范化和代码可读性,以及其主要功能,如模型导入导出、场景编辑、参数调试和数据存储等。作者分享了从开源到商业项目的经验,并推荐了相关WebGl框架的学习资源。

💡项目背景与演进:作者基于开源项目threejs-3dmodel-edit,结合企业级定制需求,开发了3D模型场景编辑器。该项目旨在解决开源项目在商业应用中的局限性,并提供更完善的功能和性能。

🛠️技术栈与项目结构:项目采用Vue3、TypeScript、Pinia和indexedDB等技术栈,注重模块化、规范化和代码可读性。项目结构包括assets、components、config、enums、layouts、router、store、style、types、utils和views等模块,方便进行二次开发和维护。

✨核心功能与特性:3D模型场景编辑器支持拖拽添加模型、几何体、灯光,以及加载本地模型文件。它还提供了模型属性、材质、几何体参数、灯光参数、相机参数和动画参数的编辑功能,并支持渲染器、场景和地面的参数动态调试。此外,该项目还支持场景保存、预览、导出和导入,以及模型复制和删除等功能,同时配备了快捷键操作。

💾数据存储方案:为了避免用户在编辑过程中丢失数据,项目采用了indexDb和.json两种方式来存储场景内容,确保了数据的持久性和可靠性。

原创 答案answer 2025-04-21 08:30 重庆

点击关注公众号,“技术干货” 及时达!

关注更多AI编程资讯请去AI Coding专区:https://juejin.cn/aicoding

前言

言归正传,今天主要还是给大家分享一下在失业的这一个半月多时间里我都干了些什么→ 3D模型场景编辑器 大概就是完成了一个这样的非开源项目。

为什么会写这样一个非开源项目呢?

答:因为在23年底左右的时间我写过一个3D模型可视化编辑器的开源项目threejs-3dmodel-edit(目前已经是gitee推荐项目),因为项目的部分功能能够满足一些企业3D的相关的开发需求,于是有很多人私信找到我能不能基于这个开源项目做一些扩展的定制化需求,但是因为上一家公司的原因,所以大部分需求我并没有一个较好的时间和精力来沟通协调,于是就都委婉拒绝掉了。

所以在失业的这段时间里,我也终于有时间和精力将这些需求整理完善和升级,于是有了最终的 3D模型场景编辑器 项目

为什么是非开源的项目呢?

答:开源项目threejs-3dmodel-edit适用于想学习three.js并且希望能够使用three.js快速开发一个实际3D相关项目的前端同学的一个学习参考媒介,项目技术栈使用Vue3+Vite+JavaScript+Pinia,项目本身也是永久开源,并且长期稳定更新的。

非开源项目 3D模型场景编辑器 结合一部分商业化的定制需求,以及基于开源项目很多功能的体验优化和升级而衍生的,并且对于开源项目中的一些性能问题和模型数据存储方案有了更好的方式。

技术栈使用Vue3+Vite+TypeScript+

Pinia+indexedDB适合用于企业级3D相关项目的开发和二次开发。

「作者个人的产品理念」:用爱发电的项目最终是无法长久的发展下去,免费的东西有时候往往会更加昂贵,非开源项目的产出是为了开源项目更好的发展。

项目的在线链接地址:3D模型场景编辑器

https://three3d-0gte3eg619c78ffd-1301256746.tcloudbaseapp.com/threejs-model-edit-pro/

项目的主要结构

首先作为企业级项目的开发我个人考虑最多的就是:项目的模块化项目的规范化代码的可读性

项目的模块化

项目是基于Vue3+Typescript+Pinia+

indexedDB来实现的

项目结构主要细分为:

    assets 静态资源
    components 公共/全局组件
    config  常量配置
    enums   全局枚举
    layouts 布局
    router  路由
    store   全局状态
    style   全局样式
    types   全局ts类
    utils  工具函数、three.js场景操作方法封装、indexDb方法封装
    views  页面

这几个大模块

项目的规范化

项目使用了 

Eslint+Prettier+Stylelint+Husky 

这一套代码格式化检查工具来确保项目代码的规范化,如果项目代码不符合相关校验规则就无法成功推送代码到github

并添加了较为严格的Typescript类型检查(不能使用any)当然如果你不需要这个也可以在(.eslintrc.cjs)关闭这个校验

代码的可读性

项目大的方向定位是要适用于企业3D项目的二次开发,因此代码的可读性和可维护变得极其重要

项目的所有的关键函数方法都采用了 JsDoc 模式的代码注释以确保能够快速上手项目内容

项目的主要功能

1. 拖拽添加模型,几何体模型,灯光,加载电脑本地模型文件(.glb,obj,gltf,fbx,usdz,stl)

2. 模型属性,模型材质,几何体模型参数,灯光参数,照相机参数,动画参数的编辑
4.渲染器,场景,地面的参数动态调试

主要针对于这些参数进行了动态的编辑

渲染器:的色调映色、阴影、曝光度

场景:背景、环境光、雾

地面:地面类型 、天气

5.场景保存,场景预览,场景导出,场景导入

在使用three.js场景设置过程中你辛苦调试了半天的场景内容,被一不小心的刷新页面或者关闭了浏览器窗口而丢失了数据的情况吧

3D模型场景编辑器项目使用了 indexDb和 .json 的这两种方式来对场景内容进行存储

6.模型导入,导出

场景的导出是将整场景内容包括(模型,灯光,天气,等数据进行导出),而模型的导出则只是针对导出场景中的所有模型

7.模型复制和删除功能

在编辑场景内容时我们可能需要重复添加一个模型多次,这时候有模型复制功能就会十分方便了

8.相关快捷键

作为一款定位于编辑器类型的项目,快捷键功能肯定是必不可少的,为了方便模型场景的相关操作,也提供了一些便捷的快捷键使用功能

结语

在当前大环境的发展下很多企业的招聘中会要求使用three.js,Babylon.js 等webGL框架,如果你相在前端领域有更好的职业发展和前景学会一种webGl框架的使用一定不会是一件坏事

如果只学习和参考three.js相关的API使用,完全可以使用免费开源版的项目https://gitee.com/ZHANG_6666/Three.js3D

如果有企业级和商业化的3D开发需求,作者更愿意推荐商业版的3D场景编辑器项目

https://three3d-0gte3eg619c78ffd-1301256746.tcloudbaseapp.com/threejs-model-edit-pro/



💰即日起至5.11发文瓜分万元奖金
📃主赛道推好文,AI命题叠福利
🔎点击上方活动图了解详情

阅读原文

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

3D模型 场景编辑器 Three.js Vue3
相关文章