【vue2.x】新手如何快速用vue导入GLTFLoader模型

Three.js支持包括 .obj、.gltf等类型的模型结构。glTF(GL传输格式)是Khronos的一个开放项目,它为3D资产提供了一种通用的、可扩展的格式,这种格式既高效又与现代web技术高度互操作。

文章目录

    • 一、安装引入Three.js
      • 在需要使用3D模型的页面导入包:
      • 在Vue中导入glTF模型需要使用 Three.js 中的 GLTFLoader:
    • 二、页面DOM元素渲染
      • 在Vue中,我们需要使用一个 div 元素来作为3D模型的容器:
    • 三、初始化
      • 代码:
    • 四、导入glTF模型
    • 五、免费下载3D模型的素材网站

一、安装引入Three.js

cnpm install three --save // 很好装的最新版本,可正常引入使用

在需要使用3D模型的页面导入包:

import * as Three from "three"

在Vue中导入glTF模型需要使用 Three.js 中的 GLTFLoader:

import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader"
// GLTF加载器(GLTFLoader),用于载入glTF 2.0资源的加载器。
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls"
// OrbitControls是THREEJS中最常用的一个控制器,可以帮助我们实现以目标为焦点的旋转缩放。

二、页面DOM元素渲染

在Vue中,我们需要使用一个 div 元素来作为3D模型的容器:

<div id="container"></div>

原理:页面打开之后,Three.js会给 div 元素添加一个 canvas 子元素用来作为3D模型的画布。

三、初始化

Three.js中最重要的三大组件:

场景——Scene

相机——Camera

渲染器——Renderer

代码:

mounted(){this.initScene()this.initContainer()this.initCamera()this.initRenderer()this.initControls()},methods:{initModelContainer() {this.model_container = document.getElementById("container");this.model_container.style.height = window.innerHeight + "px";this.model_container.style.width = window.innerWidth + "px";this.height = this.model_container.clientHeight;this.width = this.model_container.clientWidth;},initScene() {this.scene = new Three.Scene();},initCamera() {// 照相机this.camera = new Three.PerspectiveCamera(70, this.width / this.height, 0.01, 1000);this.camera.position.set(-100, 60, 0);},initRenderer() {this.renderer = new Three.WebGLRenderer({ antialias: true, alpha: true });this.renderer.setSize(this.width, this.height);// 兼容高清屏幕this.renderer.setPixelRatio(window.devicePixelRatio);// 消除canvas的外边框this.renderer.domElement.style.outline = "none";this.model_container.appendChild(this.renderer.domElement);},initControls() {this.orbitControls = new OrbitControls(this.camera,this.renderer.domElement);// 惯性this.orbitControls.enableDamping = true;// 动态阻尼系数this.orbitControls.dampingFactor = 0.25;// 缩放this.orbitControls.enableZoom = true;// 右键拖拽this.orbitControls.enablePan = true;// 水平旋转范围this.orbitControls.maxAzimuthAngle = Math.PI / 6;this.orbitControls.minAzimuthAngle = -Math.PI / 6;// 垂直旋转范围this.orbitControls.maxPolarAngle = Math.PI / 6;this.orbitControls.minPolarAngle = -Math.PI / 6;},}

四、导入glTF模型

将你的 gltf 模型放在 Vue 项目中的 public 文件夹下,注意,只有将 gltf 模型放在静态资源文件夹下才能被访问到。

在钩子函数 mounted 中进行模型加载:

mounted(){this.loadModel()},methods:{loadModel(){let that = this// gltf模型加载器let loader = new GLTFLoader()return new Promise(function(resolve, reject){loader.load(// 模型在 /public/static/building/文件夹下"static/building/scene.gltf",gltf => {console.log(gltf)gltf.scene.traverse(object => {// 修改模型材质let material = ...object.material = material})let group = new Three.Group()group.add(gltf.scene)let box = new Three.Box3()box.setFromObject(group)let wrapper = new Three.Object3D()wrapper.add(group)// 根据自己模型的大小设置位置wrapper.position.set(100, -300, 120)// 将模型加入到场景中 ! importantthat.scene.add(wrapper)},xhr => {// 模型加载期间的回调函数console.log(`${(xhr.loaded / xhr.total) * 100% building model loaded`);},error => {// 模型加载出错的回调函数console.log("error while loading", error);reject("load model error", error);})})}}

启动项目,模型导入成功,可以根据自己的需求为模型渲染材质。

五、免费下载3D模型的素材网站

网址一

网址二

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

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

相关文章

DNS 域名解析系统

文章目录 前言什么是 DNS 域名解析系统为什么需要 DNS 域名解析DNS 是如何发展的hosts 文件维护域名和IP的映射关系DNS 系统&#xff08;服务器&#xff09;DNS 镜像系统 前言 前面为大家分享了关于计算机网络中应用层——自定义协议、传输层——UDP、TCP 协议、网络层——IP协…

Java修仙传之Flink篇

大道三千:最近我修Flink 目前个人理解&#xff1a; 处理有界&#xff0c;无界流的工具 FLINK&#xff1a; FLINK定义&#xff1a; Flink特点 Flink分层API 流的定义 有界数据流&#xff08;批处理&#xff09;&#xff1a; 有界流&#xff1a;数据结束了&#xff0c;程序也…

OIerDb NG-来自信息的仪式感

OIerDb NG 参加过便有你的名字&#xff0c;历史不会遗忘你&#xff0c;仪式感满满&#xff01; 自从体测之后&#xff0c;我对信竞的欲望更强烈了。。。 偷一点懒0.25就没了&#xff0c;这玩意要记入中考总分&#xff0c;一分一操场啊啊啊&#xff01;

方法引用的学习

把已经有的方法拿过来用&#xff0c;当作函数时接口中抽象方法的方法体 1.引用出必须是函数式接口 2.被引用的方法必须已经存在 3.被引用方法的形参和返回值必须与抽象方法保持一致 4.被引用的方法功能要满足当前需求 /** 创建一个数组&#xff0c;按照倒叙排序* *///创建数…

1052 卖个萌

一.问题: 萌萌哒表情符号通常由“手”、“眼”、“口”三个主要部分组成。简单起见&#xff0c;我们假设一个表情符号是按下列格式输出的&#xff1a; [左手]([左眼][口][右眼])[右手]现给出可选用的符号集合&#xff0c;请你按用户的要求输出表情。 输入格式&#xff1a; …

大数据之LibrA数据库系统告警处理(ALM-12005 OKerberos资源异常)

告警解释 告警模块对Manager中的Kerberos资源的状态进行监控&#xff0c;当Kerberos资源异常时&#xff0c;系统产生此告警。 当Kerberos资源恢复时&#xff0c;且告警处理完成时&#xff0c;告警恢复。 告警属性 告警参数 对系统的影响 Manager中的Kerberos资源异常&#…

ceph高可用、手动安装

操作系统&#xff1a;centos8 三台服务器&#xff1a; 192.168.6.22&#xff1a;mon,mgr,mds,osd 192.168.6.23&#xff1a;mon,mgr,mds,osd 192.168.6.24&#xff1a;mon,mgr,mds,osd 正式环境osd和mon不应该在一个节点&#xff0c;建议osd单独服务器安装。 ceph版本&am…

element表格自定义筛选

文章目录 前言一、简介二、效果展示三、源码总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; …待续 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、简介 修改el-table的筛选…待续 二、效果展示 三、源码 使用方法…

PHP判断闰年

闰年的规则 1.能被4整除且不能被100整除 &#xff08;普通闰年&#xff09; 2.能被400整除&#xff0c;公历年份是整百数的&#xff0c;必须是400的倍数才是闰年&#xff08;世纪闰年&#xff09; 代码 function isLeapYear($year) {if($year%40 && $year%100!0){r…

Go 中的 OOP- 用结构体代替类

Go是面向对象的吗&#xff1f; Go 不是一种纯粹的面向对象编程语言。这段摘录自 Go 的常见问题解答&#xff0c;回答了 Go 是否是面向对象的问题。 是也不是。虽然Go有类型和方法&#xff0c;并且允许面向对象的编程风格&#xff0c;但是没有类型层次结构。Go中的“接口”概念…

sentinel规则持久化-规则同步nacos-最标准配置

官方参考文档&#xff1a; 动态规则扩展 alibaba/Sentinel Wiki GitHub 需要修改的代码如下&#xff1a; 为了便于后续版本集成nacos&#xff0c;简单讲一下集成思路 1.更改pom 修改sentinel-datasource-nacos的范围 将 <dependency><groupId>com.alibaba.c…

[SUCTF 2019]EasySQL 1

题目环境&#xff1a; 把你的旗子给我&#xff0c;我会告诉你旗子是不是对的。 判断注入类型1回显结果 不是字符型SQL注入 1回显结果 数字型SQL注入 查所有数据库,采用堆叠注入1;show databases;查看所有数据表1;show tables;尝试爆Flag数据表的字段1;show columns from Flag; …

算法——程序的灵魂

文章目录 前言算法与程序的关系例子1&#xff1a;冒泡排序例子2&#xff1a;斐波那契数列算法优化与进阶总结 前言 大家好我是艾老虎尤&#xff0c;算法与程序是计算机科学中两个非常重要的概念。算法是解决问题的方法和步骤&#xff0c;而程序是算法的具体实现。在计算机科学…

LeetCode | 27. 移除元素

LeetCode | 27. 移除元素 OJ链接 这道题有一个方法是要删除的数据直接后一个数据挪动到前一个数据&#xff0c;这个方法好不好&#xff1f;最坏的情况下时间复杂度是O(N^2) 还有一个方法 定义一个src定义一个dst&#xff0c;原地直接进行赋值&#xff0c;不进行挪动&#xf…

Qt程序执行编译输出内容解释

以这个为例&#xff1a; D:\SoftwareInstall\Qt6\Tools\QtCreator\bin\jom\jom.exe -f Makefile.Debug cd AuthorizeTools\ && ( if not exist Makefile D:\SoftwareInstall\Qt6\5.15.2\msvc2019_64\bin\qmake.exe -o Makefile E:\Coding\project\DigitalCamera\digita…

yum安装node,npm

node官网 yum -y install nodejs npm 查看版本 npm -v node -v卸载 yum -y remove nodejs npm修改镜像源 4.1. 修改淘宝镜像源 set registry https://registry.npm.taobao.org npm config get registr4.2. 修改华为云镜像源 npm config set registry https://mirrors.huaweicl…

Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库

Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库 Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库安装 IndexDB类库引入 localForage测试 新增数据、获取数据 Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库 大部分场景使用 LocalStore都…

【Python】海龟图turtle.color() 方法有关RGB颜色设置详解

在Turtle模块中&#xff0c;turtle.color()函数用于设置画笔和填充颜色&#xff0c;你可以使用RGB颜色码作为参数。RGB颜色码由三个数字组成&#xff0c;分别代表红色&#xff08;R&#xff09;&#xff0c;绿色&#xff08;G&#xff09;和蓝色&#xff08;B&#xff09;的分量…

驱动开发platform

任务 : 基于platform驱动模型完成LED驱动的编写&#xff0c;实现三盏灯的点亮 驱动代码 #include <linux/init.h> #include <linux/module.h> #include <linux/platform_device.h> #include <linux/mod_devicetable.h> #include <linux/of.h>…

Linux | 进程终止与进程等待

目录 前言 一、进程终止 1、进程终止的几种可能 2、exit 与 _exit 二、进程等待 1、为什么要进程等待 2、如何进行进程等待 &#xff08;1&#xff09;wait函数 &#xff08;2&#xff09;waitpid函数 3、再次深刻理解进程等待 前言 我们前面介绍进程时说子进程退出…