Three.js基础入门系列(九)--导入3D模型

news2025/1/24 10:36:38

先来学习今天的知识——Three.js导入3D模型

复杂的3D模型(比如制作一个飞机模型)一般都是用第三方建模工具生成,然后加载到Three.js中。

01

常用建模制作工具

3Dmax

链接地址:https://www.autodesk.com.cn/products/3ds-max/overview?referrer=%2Fproducts%2F3ds-max%2Foverview

最常见的3D建模软件,广泛应用于广告、影视、工业设计、建筑设计、三维动画、多媒体制作、游戏、辅助教学以及工程可视化等领域。

SketchUp

链接地址:https://www.sketchup.com/zh-CN

SketchUp是一个极受欢迎并且易于使用的3D设计软件,官方网站将它比喻作电子设计中的“铅笔”。它的主要卖点就是使用简便,人人都可以快速上手

02

常用3D模型素材网站

ketchupbar

链接地址:https://www.sketchupbar.com/default.php

sketchfab

链接地址:https://sketchfab.com/

03

Three.js支持的3D模型格式

Three.js支持的导出格式

Three.js在线编辑器:https://threejs.org/editor/

Three.js支持的全部格式

https://github.com/mrdoob/three.js/tree/dev/examples/js/loaders

04

在Three.js中导出3D模型步骤

1️⃣ 打开 Three.js在线编辑器

 https://threejs.org/editor/

2️⃣ 点击添加按钮,选择将要添加的几何体模型

3️⃣ 设置几何体模型的材质类型和材质颜色

4️⃣ 设置几何体模型的属性(比如:位置、旋转、缩放)

5️⃣ 将3D模型导出(选择导出场景,导出的是一个json格式的文件)

json格式,一般用于Three.js官方的editor导出

05

在Three.js中导入3D模型步骤

1️⃣ 把下载好的json文件放入项目目录中(放入的位置随意)

2️⃣ json文件中的JSON格式指的是Three.js可以将其转换为场景的3D对象的JSON格式模型。这种格式内部一般必有的四项为:

◾ metadata 当前模型的相关信息以及生成的工具信息

◾ geometries 存储当前模型所使用的几何体的数组

◾ materials 存储当前模型所使用的材质的数组

◾ object 当前模型的结构以及标示所应用到的材质和几何体标示

所有的模型网格,几何体和材质都有一个固定的uuid标识符,JSON格式中都是通过uuid作为引用。

3️⃣ 使用ObjectLoader加载JSON模型

既然我们能够导出模型,肯定就可以导入。这里我们将使用到Three.js内置的对象THREE.ObjectLoader来加载模型:

案例截图:

完整代码如下:

注意:只要是通过 loader.load()方法导入,必须要使用VSCode编辑器中的 live-server插件的方式打开页面。

不然会有跨域的问题。

06

glTF格式文件的导出和导入

Three.js官方推荐我们使用的3D模型的格式为glTF,由于glTF专注于传输,因此它的传输和解析的速度都很快。

glTF模型功能包括:网格、材质、纹理、灯光、相机等。

先在VSCode编辑器中安装glTF Tools插件,安装这个插件后我们就能在VSCode编辑器中查看 .gltf的文件效果了

glTF格式的3D格式文件我们可以在sketchfab官网下载,这是一个国外比较知名的模型网站。

sketchfab官网模型下载地址:

https://sketchfab.com/3d-models?date=week&features=downloadable&sort_by=-likeCount

下载其中一个模型,选择gltf格式下载

glTF格式加载器(loader)地址:

https://github.com/mrdoob/three.js/blob/master/examples/js/loaders/GLTFLoader.js

1️⃣ 首先,将GLTFLoader加载器插件引入到页面。

2️⃣ 然后创建一个加载器:

3️⃣ 使用加载器去加载模型,并调节一下模型大小在场景内展示:

注意:以上的scene.gltf文件必须跟3D_gltf在同一个目录中,不能单独把scene.gltf移动到3D_gltf目录的外边。

案例截图:

完整代码如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/407947.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

启动vue-element-admin 安装npm install报错npm ERR! code 128npm ERR! An unknown git error occurre

使用vue-element-admin前端项目,前提是有nodejs环境,对于此环境的安装可以参考网上的博客。此博客用于记录启动项目以及遇到的问题、并解决问题的过程。1、介绍vue-element-admin是基于element-ui 的一套后台管理系统集成方案 。功能:https:/…

Vue基础教程(下篇)

😊作者简介:大家好,我是是你的大头呢,一名大三学生,考研备考中。让我们一起加油,一起努力! 🧑‍💻博客主页:是你的大头呢 🥰欢迎关注&#x1f38a…

javascript 中搜索数组的四种方法

前端经常要通过 javaScript 来处理数组中的数据,其中就包括检查数组中是否包含满足特定搜索条件的单个或者多个值,这就需要我们关于用于确认的布尔值、数组中值得位置索引或包含所有搜索结果的单独数组等。 在 ECMAScript6 之前,最常用的方法…

Vue中 this.$set的用法

一、this.$set能够实现什么功能 官方解释:向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新。它必须用于向响应式对象上添加新属性,因为 Vue无法探测普通的新增属性 (比如 this.myObject.newProperty …

pdf在线预览 pdf.js的使用

1.官网:https://mozilla.github.io/pdf.js/ 2、使用方法 1) 通过官网,下载pdfJs插件包,放至项目中; window.open("./js/pdfJS/web/viewer.html?fileAngularJS权威指南.pdf" );2)将下载的pdfJS…

uniapp封装axios?大可不必那么麻烦。

最近群里的一个小明同学问 uniapp可以使用axios请求吗?我当时就一愣 反问为什么要使用axios,是 uni.request 不香了吗? 小明:因为axios可以像vue的项目一样,在request里面封装巴拉巴拉一堆。 我:那uni.re…

微信小程序开发使用onreachBottom实现页面触底加载及分页

目录 一 简要介绍一下onreachBottom事件 二 实例展示 三 遇到的一些问题 一 简要介绍一下onreachBottom事件 onreachBottom和onLoad以及onShow一样,都属于小程序的生命周期事件,作用就是在页面下拉到底部时触发这个事件,一般适用于数据比较…

一次跨域的坑Faild to load response data: No resourse with given identifier found

有一个导出接口,前后端都没有动过,之前也测试过没有问题。上到测试环境后,测试环境加了证书,报错了。 先是后端小朋友和我说了这个问题: 浏览器控制台打印信息(聊天记录中那张图):然后我问他操作了哪个页面…

vue3.0教程——搭建Vue脚手架【简化版】

目录 哈喽,大家好丫,你们的小郭子又来啦 ~ 一、环境要求 (1)node安装(前端开发环境) (2)vue-cli脚手架安装 二、安装依赖 (1)使用命令行安装以下依赖 &a…

Vue 之 vue-seamless-scroll 实现简单自动无缝滚动,且添加对应点击事件的简单整理

Vue 之 vue-seamless-scroll 实现简单自动无缝滚动,且添加对应点击事件的简单整理 目录 Vue 之 vue-seamless-scroll 实现简单自动无缝滚动,且添加对应点击事件的简单整理 一、简单介绍 二、安装和使用 三、效果图 四、vue-seamless-scroll 点击事件…

(网页开发/前端)配置VsCode,让您拥有更舒适的开发环境

vscode,微软旗下的一款强大的IDE集成开发环境,现在,越来越多的网页开发人员选择使用vscode来敲代码。 但是,在不添加任何扩展的vscode中,想要享受“丝滑”的开发体验是比较困难的。所以,接下来,…

js从地址栏获取参数

一、过程分四步: 1.获取地址栏; var loclocation.href; 2.获取地址栏的长度 var n1loc.length; 3.获取地址栏中第一个等号的位置; var n2loc.indexOf(); 4.以等号位置,截取后面的内容; var strloc.slice(n2…

Object.entries()

Object.entries() 方法返回一个给定对象自身可枚举属性的键值对数组。 其排列与使用 for...in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环还会枚举原型链中的属性)。 语法 Object.entries(obj) 参数 obj:可以返回其可枚举属性…

VS2022(Visual Studio)发布ASP.NET Core Web API应用到Web服务器(IIS)

概述 写完代码后,最常用、简单的发布方式,就是将应用发布到文件夹,然后将publish文件夹复制到要部署的机器上(本地、局域网服务器、云服务器等)。 但是在实际工作中,可能会遇到需要频繁地发布&#xff0c…

vue--后台管理系统问题和功能实现思路集锦

目录 一、动态菜单 1、问题:点击菜单,其他菜单都会打开,且选中某个菜单,其他菜单都会选中 2、问题:home页面代码内动态菜单数据获取的位置 二、动态路由 1、问题:刷新home页面后,页面报错&…

微信小程序开发(遇到的报错和注释)

一开始验证文章出错了,一直运行不起来,取消设置,可以正常调用。 页面小程序窗口组件部分:navigationbar导航栏区域,background背景区域(默认不可见,下拉才显示)、页面的主题区域&am…

教你一文解决 js 数字精度丢失问题

文章目录一、关于为什么要解决精度丢失二、怎么解决js的计算精度丢失问题?三、toPrecision 特定方法返回四舍五入长度字符串结语一、关于为什么要解决精度丢失 可以看下例子,因为js失去精度问题也是常见的问题,正常我们可以四舍五入或者 toF…

vue3中使用ant-design-vue的layout组件实现动态导航栏功能(1~2级)

目录 0 前言 1 准备工作 1.1 安装ant-design-vue 1.2 安装图标组件包 2 选择组件 3 路由文件 4 Vue导航页面 5 最终效果 0 前言 最近在自己搞一个前后端小项目,前端想使用ant-design-vue的layout组件实现动态导航栏和面包屑,但是网上的资料较少&…

新星微前端MicroApp的基础教程

目录 什么是微前端? 使用场景 microApp介绍 概念图 micorApp的优势 microApp项目的应用 基座 基座路由 子应用 react项目中路由位置进行使用 跨域的问题 react项目中跨域 vue项目中跨域 micorApp基础介绍 micorApp传值(重要) …

Vue 2项目如何升级到Vue 3?

应不应该从 Vue 2 升级到 Vue 3 应不应该升级?这个问题不能一概而论。 首先,如果你要开启一个新项目,那直接使用 Vue 3 是最佳选择。后面课程里,我也会带你使用 Vue 3 的新特性和新语法开发一个项目。 以前我独立使用 Vue 2 开…