Vue3-TypeScript-Threejs:导入外部的glb格式3D模型

一、直接上代码,在vue3-typescript-threejs 项目 导入外部的glb格式3D模型

极简代码,快速理解

<template><div ref="container"></div></template><script lang="ts" setup>import { onMounted, ref } from 'vue';import * as THREE from 'three';import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";const container:any = ref(null);// glb模型路径,需要放在public目录下const url = "../../../public/3d/chair.glb";onMounted(() => {const loader: any = new GLTFLoader();// 创建场景const scene: any = new THREE.Scene();// glb 模型文件路径loader.load(url,(gltf: any) => {// 成功加载模型后执行的操作const model = gltf.scene;// 将模型添加到场景中scene.add(model);},(xhr: any) => {// 模型加载过程中执行的操作console.log(`30${(xhr.loaded / xhr.total) * 100}% 已加载`);},(error: any) => {// 模型加载失败执行的操作console.error(`34模型加载失败:${error}`);});});</script>

二、直接上代码,在vue3-typescript-threejs 项目 导入外部的glb格式3D模型,展示在页面上

<template><div></div></template><script lang="ts">import { defineComponent } from "vue";import * as THREE from "three";import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";export default defineComponent({mounted() {// 创建场景const scene = new THREE.Scene();const url = "../../../public/3d/chair.glb";// 创建相机const camera = new THREE.PerspectiveCamera(135,window.innerWidth / window.innerHeight,0.1,1000);// 添加环境光const ambientLight = new THREE.AmbientLight(0xffffff, 0.5);scene.add(ambientLight);// 创建渲染器const renderer = new THREE.WebGLRenderer();renderer.setSize(window.innerWidth, window.innerHeight);document.body.appendChild(renderer.domElement);// 加载 glb 格式的 3D 模型const loader = new GLTFLoader();loader.load(url,(gltf) => {// 加载成功后的回调函数const model = gltf.scene;model.scale.set(0.8, 0.8, 0.8); // 缩小模型const box = new THREE.Box3().setFromObject(model);const center = box.getCenter(new THREE.Vector3());model.position.sub(center); // 将模型位置移到原点处scene.add(model);},(xhr) => {// 加载过程中的回调函数console.log((xhr.loaded / xhr.total) * 100 + "% loaded");},(error) => {// 加载失败的回调函数console.error("Failed to load model", error);});// 渲染场景const animate = () => {requestAnimationFrame(animate);renderer.render(scene, camera);};animate();},});</script><style>body {margin: 0;overflow: hidden;}</style>

blender软件展示效果

导入后展示效果 ,应该是没有导入材质、贴图,后续完善后更新本文

三、过程记录

记录一、vue3项目,3D模型需要放在public目录下,否则找不到文件404

确认.glb文件的路径是否正确。
如果你使用的是相对路径,确保相对路径与 Vue3 项目中public目录下的文件路径一致。

记录二、GLTFLoader导入模型 和 three/examples/jsm/loaders/GLTFLoader 导入模型有什么区别

------AI回答一---------

GLTFLoader 是 Three.js 官方提供的加载 glTF 格式模型的模块,它已经集成在了 Three.js 中,可以直接使用。而 three/examples/jsm/loaders/GLTFLoader 是 Three.js 官方提供的一个案例,它是基于 GLTFLoader 开发的,同时也是 Three.js 的模块。

它们的主要区别在于:

1、GLTFLoader 是 Three.js 核心库的一部分,所以它的稳定性和兼容性更高。而 three/examples/jsm/loaders/GLTFLoader 是一个案例,可能更新不及时或者不被支持的情况较多。

2、GLTFLoader 是一个基础模块,只提供了最基本的 glTF 模型加载功能。而 three/examples/jsm/loaders/GLTFLoader 是在 GLTFLoader 基础上开发的,提供了一些更高级的功能,例如模型的动画、材质等。

总体来说,GLTFLoader 适合基础需求,而 three/examples/jsm/loaders/GLTFLoader 适合高级需求。但是,需要注意的是,如果使用 three/examples/jsm/loaders/GLTFLoader,需要将其引入到项目中,增加项目的体积。

--------AI回答二------

GLTFLoader导入模型和three/examples/jsm/loaders/GLTFLoader导入模型的区别如下:

作用不同 。GLTFLoader主要是用来载入.gltf/.glb格式的3D模型文件,three/examples/jsm/loaders/GLTFLoader主要是用来载入.obj格式的3D模型文件。
使用方式不同 。GLTFLoader的使用方式为:先新建一个GLTFLoader对象,然后调用该对象的load()方法,传入模型文件的路径,即可载入模型。three/examples/jsm/loaders/GLTFLoader的使用方式为:先新建一个GLTFLoader对象,然后传入一个配置对象进行初始化,再调用该对象的parse()方法,传入需要解析的obj模型数据,即可解析模型。

记录三、webgl threejs 引入glb模型后可以通过鼠标旋转模型吗

是的,通过Three.js和WebGL,您可以轻松地在网页上使用鼠标旋转GLB模型。

待补充

记录四、threejs 引入 glb模型,材质 和 贴图需要单独引入吗

-------AI回答一-------

在Three.js中引入GLB模型时,模型的材质和贴图会自动被加载。如果您在模型中定义了纹理和材质,Three.js会自动加载它们。如果您需要单独加载材质或贴图,可以使用Three.js的加载器来加载它们,然后将它们应用到您的模型中。

--------AI回答二--------

在Three.js中,引入GLB模型后,材质和贴图通常需要单独引入。

在Three.js中,GLB模型是一种二进制格式的3D模型文件,包含了模型的几何形状、材质和贴图等数据。当使用GLB模型时,通常需要将材质和贴图单独引入,以实现模型的完整呈现。

对于材质,可以在Three.js中创建材质对象,并将材质应用到模型上。例如,可以使用THREE.MeshBasicMaterial、THREE.MeshLambertMaterial等基本材质类型,或者使用THREE.ShaderMaterial等自定义材质类型。

对于贴图,可以在Three.js中使用TextureLoader对象加载贴图文件,并将贴图设置到材质的map属性中。例如,可以使用THREE.TextureLoader加载一张图片,并将其设置为模型的贴图。

四、欢迎交流指正

五、参考链接

WebGl-Blender:建模 / 想象成形 / 初识 Blender-CSDN博客

WebGL-Vue3-TS-Threejs:基础练习 / Javascript 3D library / demo-CSDN博客

WebGL:基础练习 / 简单学习 / demo / canvas3D-CSDN博客

canvas:理解canvas / 基础使用 / 实用demo-CSDN博客

webpack 导入 three.js,引入模型glb/gltf 404_喵咪那个汪~的博客-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阶段七-Day01-SpringMVC

一、Sping MVC的介绍 1. 使用Front(前端)设计模式改写代码 1.1 目前我们的写法 目前我们所写的项目&#xff0c;持久层、业务层的类都放入到Spring容器之中了。他们之间需要注入非常方便&#xff0c;只需要通过Autowired注解即可。 但是由于Servlet整个生命周期都是被Tomca…

数据结构—二叉树的模拟实现(c语言)

目录 一.前言 二.模拟实现链式结构的二叉树 2.1二叉树的底层结构 2.2通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树 2.3二叉树的销毁 2.4二叉树查找值为x的节点 2.5二叉树节点个数 2.6二叉树叶子节点个数 2.7二叉树第k层节点个数 三.二叉树的遍历 3.1…

java基础-数据类型

1、变量 变量就是申请内存来存储值。也就是说&#xff0c;当创建变量的时候&#xff0c;需要在内存中申请空间。 内存管理系统根据变量的类型为变量分配存储空间&#xff0c;分配的空间只能用来储存该类型数据。 因此&#xff0c;通过定义不同类型的变量&#xff0c;可以在内…

【C++】类与对象 I

类与对象 I &#xff1a; 前言&#xff1a;&#xff08;C&#xff09;面向过程 和&#xff08;C&#xff09;面向对象 初步认识前言&#xff1a;类的引入一、类的介绍二、类的定义&#xff08;一&#xff09;class 语法&#xff08;二&#xff09;类的两种定义方式&#xff1a;…

个人网厅——销户

目录 需求文档 公积金销户类 controller层 service层 service层实现类 1.验证 &#xff08;个人账户&#xff09; 2.提交&#xff08;添加&#xff09; controller层 service层 service层实现类 3.分页查询 controller层 service层 service层实现类 4. 详情查询…

excel中通过ROW函数返回引用的行号

例如&#xff0c;想引用B3的行号&#xff08;行号应该是3&#xff09;&#xff1a; 鼠标点在想输入函数的单元格&#xff1a; 插入-》函数&#xff1a; 选择ROW函数&#xff1a; 点击“继续”&#xff0c;然后点击红框圈出来的按钮&#xff1a; 鼠标点击B3单元格&…

数据结构----链式栈的操作

链式栈的定义其实和链表的定义是一样的&#xff0c;只不过在进行链式栈的操作时要遵循栈的规则----即“先进后出”。 1.链式栈的定义 typedef struct StackNode {SElemType data;struct StackNode *next; }StackNode,*LinkStack; 2.链式栈的初始化 Status InitStack(LinkSta…

人工智能与充电技术:携手共创智能充电新时代

人工智能与充电技术&#xff1a;携手共创智能充电新时代 摘要&#xff1a;本文探讨了人工智能与充电技术的结合及其在未来充电设施领域的应用。通过分析智能充电系统的技术原理、优势以及挑战&#xff0c;本文展望了由人工智能驱动的充电技术为未来电动交通带来的巨大变革与机…

25.4 MySQL 函数

1. 函数的介绍 1.1 函数简介 在编程中, 函数是一种组织代码的方式, 用于执行特定任务. 它是一段可以被重复使用的代码块, 通常接受一些输入(参数)然后返回一个输出. 函数可以帮助开发者将大型程序分解为更小的, 更易于管理的部分, 提高代码的可读性和可维护性.函数在编程语言…

Elasticsearch 面试题

文章目录 Elasticsearch 读取数据您能解释一下 X-Pack for Elasticsearch 的功能和重要性吗&#xff1f;Elasticsearch 中的节点&#xff08;比如共 20 个&#xff09;&#xff0c;其中的 10 个选了 一个master&#xff0c;另外 10 个选了另一个 master&#xff0c;怎么办&…

《原则》思维导图

ProcessOn 《原则》是一本投资与管理领域的经典之作&#xff0c;作者瑞达利欧以生动的语言和深入浅出的方式&#xff0c;分享了他的投资原则和管理经验。这本书不仅适合金融从业者&#xff0c;也对一般读者有很大启发。 通过阅读《原则》&#xff0c;你将了解到如何建立有效的…

Java 并发-Lock

目录 Lock 源码 lock() tryLock() tryLock(long time, TimeUnit unit) Lock与synchronized Lock Lock 是 java.util.concurrent.locks包 下的接口。 上图是 java.util.concurrent.locks包下主要常用的类与接口的关系。 源码 public interface Lock {void lock();void l…

什么是代理模式,用 Python 如何实现 Proxy(代理 或 Surrogate)对象结构型模式?

什么是代理模式&#xff1f; 代理&#xff08;Proxy&#xff09;是一种结构型设计模式&#xff0c;其目的是通过引入一个代理对象来控制对另一个对象的访问。代理对象充当目标对象的接口&#xff0c;这样客户端就可以通过代理对象间接地访问目标对象&#xff0c;从而在访问过程…

Ubuntu诞生已经19年了

导读2004 年 10 月 20 日&#xff0c;Ubuntu 4.10 正式发布&#xff0c;代号‘Warty Warthog’。 2004 年 10 月 20 日&#xff0c;Ubuntu 4.10 正式发布&#xff0c;代号‘Warty Warthog’。 ▲ Ubuntu 4.10 与最新版 Ubuntu 23.10 的对比 作为 Ubuntu 第一个版本&#xff0…

MATLAB 全景图切割及盒图显示的实现步骤

参考&#xff1a;MATLAB 全景图切割及盒图显示的实现步骤 | w3cschool笔记 在摄像领域中全景图是一种可以将周围360度景象全部收录的一种拍照技术&#xff0c;但全景图的实际观感并不是那么好&#xff08;可以看下文的全景图的样例&#xff09;。我们可以通过matlab来进行全景…

4.CentOS7安装MySQL5.7

CentOS7安装MySQL5.7 2023-11-13 小柴你能看到嘛 哔哩哔哩视频地址 https://www.bilibili.com/video/BV1jz4y1A7LS/?vd_source9ba3044ce322000939a31117d762b441 一.解压 tar -xvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz1.在/usr/local解压 tar -xvf mysql-5.7.44-…

R语言——taxize(第一部分)

ropensci 系列之 taxize &#xff08;中译手册&#xff09; taxize 包1. taxize支持的网络数据源简介目前支持的API&#xff1a;针对Catalogue of Life&#xff08;COL&#xff09; 2. 浅尝 taxize 的一些使用例子2.1. **从NCBI上获取唯一的分类标识符**2.2. **获取分类信息**2…

list复制出新的list后修改元素,也更改了旧的list?

例子 addAll() Testpublic void CopyListTest(){Student student Student.builder().id(1).name("张三").age(23).classId(1).build();Student student2 Student.builder().id(2).name("李四").age(22).classId(1).build();List<Student> student…

ElasticSearch的文档、字段、映射和高级查询

1. 文档&#xff08;Document&#xff09; 在ES中一个文档是一个可被索引的基础信息单元&#xff0c;也就是一条数据 比如&#xff1a;你可以拥有某一个客户的文档&#xff0c;某一个产品的一个文档&#xff0c;当然&#xff0c;也可以拥有某个订单的一个文档。文档以JSON&…

[文件读取]lanproxy 文件读取 (CVE-2021-3019)

1.1漏洞描述 漏洞编号CVE-2021-3019漏洞类型文件读取漏洞等级⭐漏洞环境VULFOCUS攻击方式 描述: Lanproxy 路径遍历漏洞通过../绕过读取任意文件。该漏洞允许目录遍历读取/../conf/config.properties来获取到内部网连接的凭据。 1.2漏洞等级 高危 1.3影响版本 Lanproxy 1.4漏洞…