three.js----快速上手,如何用vue在web页面中导入 gltf/glb , fbx , obj 模型

首先去three.js官网下载three.js包,或者在直接在vue项目中 npm install three@0.158.0 --save

(学three.js需要有一点前端基础,基础掌握不牢的还是从基础开始)

这个0.158.0是版本号,不用纠结选新的还是选旧的,新手先不考虑这些,three.js基本上个把月就会更新一次,选一个不太新也不太旧的即可,初学直接上手操作,出了问题后才好纠正(因为如果代码cv过来了一个问题都没遇到,可能到最后学会的也只有cv了 !!!)

npm install 成功后,可在node_modules文件夹中可以看到 three 文件夹

目录就不介绍了,打开就这些

基本要用到的东西都在在 three/examples/jsm 目录下

jsm目录是threejs各种功能扩展库

找到loaders文件夹,所有的模型导入功能库都在这里

这三个分别是 .fbx  .gltf/.glb  .obj的导入工具

jsm中的libs文件夹中:

draco文件是模型解压文件,.gltf格式的要用到


ok,该讲的基础讲完了,开始演示,如何导入.fbx模型

.fbx

<template><div class="bodys"><div class="content" ref="modelBox"></div></div>
</template><script setup>
import * as THREE from "three";
import { ref, onMounted } from 'vue'
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js"
import { FBXLoader } from "three/examples/jsm/loaders/FBXLoader";
const modelBox = ref()
let controls// 创建场景
const scene = new THREE.Scene;
// 创建相机
const camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.set(10, 10, 10)// -----相机位置
// 创建渲染器
const renderer = new THREE.WebGLRenderer({antialias: true//添加抗锯齿
});
renderer.setSize(window.innerWidth, window.innerHeight)//渲染器大小
// 渲染函数
const render = () => {renderer.render(scene, camera); //渲染器添加场景和相机requestAnimationFrame(render); //requestAnimationFrame是逐帧渲染(逐帧触发rander)
}
// 挂载后渲染dom
onMounted(() => {modelBox.value.appendChild(renderer.domElement)renderer.setClearColor("#000")//初始化背景颜色scene.background = new THREE.Color("#ccc")//设置背景为#000scene.environment = new THREE.Color("#ccc")// const gridHelp = new THREE.GridHelper(10,10)//设置网格地面,大小10*10(可选加)// scene.add(gridHelp)render()//执行渲染
})// 添加控制器
controls = new OrbitControls(camera, renderer.domElement)
// 导入模型
const loader = new FBXLoader()
loader.load('../../public/model/monitor/camera.fbx', (fbx) => {console.log('fbx', fbx); //可以把模型输出出来fbx.position.set(0, 0, 0); //模型位置,我设置为原点(0,0,0)scene.add(fbx) //添加模型
})// 添加灯光(看需求添加光源,我这里直接把光拉满)
const light1 = new THREE.DirectionalLight(0xffffff, 1);
light1.position.set(0, 0, 10);
scene.add(light1);
const light2 = new THREE.DirectionalLight(0xffffff, 1);
light2.position.set(0, 0, -10);
scene.add(light2);
const light3 = new THREE.DirectionalLight(0xffffff, 1);
light3.position.set(10, 0, 0);
scene.add(light3);
const light4 = new THREE.DirectionalLight(0xffffff, 1);
light4.position.set(-10, 0, 0);
scene.add(light4);
const light5 = new THREE.DirectionalLight(0xffffff, 1);
light5.position.set(0, 10, 0);
scene.add(light5);
const light6 = new THREE.DirectionalLight(0xffffff, 0.3);
light6.position.set(5, 10, 0);
scene.add(light6);
const light7 = new THREE.DirectionalLight(0xffffff, 0.3);
light7.position.set(0, 10, 5);
scene.add(light7);
const light8 = new THREE.DirectionalLight(0xffffff, 0.3);
light8.position.set(0, 10, -5);
scene.add(light8);
const light9 = new THREE.DirectionalLight(0xffffff, 0.3);
light9.position.set(-5, 10, 0);
scene.add(light9);
</script>

.gltf/.glb

<template><div class="bodys"><div class="content" ref="modelBox"></div></div>
</template>
<script setup>
import * as THREE from "three";
import { ref, onMounted } from 'vue'
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js"
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";
import { DRACOLoader } from "three/examples/jsm/loaders/DRACOLoader"// 创建场景
const scene = new THREE.Scene;
// 创建相机
const camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.set(10,10,10)// -----相机位置
// 创建渲染器
const renderer = new THREE.WebGLRenderer({antialias: true//添加抗锯齿
});
renderer.setSize(window.innerWidth, window.innerHeight)//渲染器大小// 挂载后渲染dom
onMounted(() => {modelBox.value.appendChild(renderer.domElement)renderer.setClearColor("#000")//初始化背景颜色scene.background = new THREE.Color("#ccc")//设置背景为#000scene.environment = new THREE.Color("#ccc")render()//执行渲染
})
// 渲染
const render = () => {// renderer.render(scene, camera);composer.render()requestAnimationFrame(render);
}
// 添加控制器
controls = new OrbitControls(camera, renderer.domElement)
// 导入模型
const loader = new GLTFLoader()
const dracoLoader = new DRACOLoader()
dracoLoader.setDecoderPath('../../node_modules/three/examples/jsm/libs/draco/') //模型解压文件
loader.setDRACOLoader(dracoLoader)
loader.load('../../public/model/smartbuilding/SmartBuilding_Map.gltf', (gltf) => {console.log(gltf);const obj = gltf.scene;group = gltf.scene;obj.position.set(0, 0, 0);scene.add(obj)
})// 添加灯光const light1 = new THREE.DirectionalLight(0xffffff, 1);light1.position.set(0, 0, 10);scene.add(light1);const light2 = new THREE.DirectionalLight(0xffffff, 1);light2.position.set(0, 0, -10);scene.add(light2);const light3 = new THREE.DirectionalLight(0xffffff, 1);light3.position.set(10, 0, 0);scene.add(light3);const light4 = new THREE.DirectionalLight(0xffffff, 1);light4.position.set(-10, 0, 0);scene.add(light4);const light5 = new THREE.DirectionalLight(0xffffff, 1);light5.position.set(0, 10, 0);scene.add(light5);const light6 = new THREE.DirectionalLight(0xffffff, 0.3);light6.position.set(5, 10, 0);scene.add(light6);const light7 = new THREE.DirectionalLight(0xffffff, 0.3);light7.position.set(0, 10, 5);scene.add(light7);const light8 = new THREE.DirectionalLight(0xffffff, 0.3);light8.position.set(0, 10, -5);scene.add(light8);const light9 = new THREE.DirectionalLight(0xffffff, 0.3);light9.position.set(-5, 10, 0);scene.add(light9);
</script>

.obj

.obj格式文件的模型和.fbx类似,只需要将:

import { FBXLoader } from "three/examples/jsm/loaders/FBXLoader";

换成

import { OBJLoader} from "three/examples/jsm/loaders/OBJLoader";

即可

( ง⁼̴̀ω⁼̴́)ง⁼³₌₃ 

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

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

相关文章

搞定抖音视频剪辑,这四款足矣!

现在真的是人人都会剪辑的时代了&#xff0c;作为一个刚踏入视频创作大门的菜鸟&#xff0c;我可是没少在这些剪辑软件里摸爬滚打。今天&#xff0c;就让我以一个新手的视角&#xff0c;给大家伙儿说说四款剪辑工具&#xff0c;在抖音这片战场上&#xff0c;它们各自的表现如何…

速卖通欧盟资质认证怎么弄?速卖通GPSR超全认证攻略请收下!

8月19日&#xff0c;速卖通官方发布了关于欧盟《通用产品安全法规》&#xff08;简称&#xff1a;GPSR&#xff09;的管控通知。 通知显示&#xff1a;针对未按照法规要求完成合规的商品&#xff0c;平台已于9月中旬开始陆续执行屏蔽管控&#xff0c;预计在12月1日前完成&…

轻量级日志管理系统SpringBoot3+Loki+grafana的使用实例

目录 文章目录 目录1、简介2、SpringBoot3应用发送日志到Loki2.1、基本介绍2.2、添加依赖2.3、配置文件application.yml2.4、创建logback配置2.5、添加日志示例2.6、运行SpringBoot3 3、在grafana中查看日志3.1、登录grafana3.2、查询日志3.3、查询我们的SpringBoot发送过来的日…

【Linux】进程的标识符、状态(超详解)

目录 进程的概念 进程标识符PID 系统调用创建进程-fork初识 进程状态 R状态&#xff08;运行状态&#xff09; S&#xff0c;D状态&#xff08;休眠状态&#xff09; T&#xff0c;t状态 Z状态&#xff08;僵尸进程&#xff09; 孤儿进程 X状态&#xff08;死亡状态&a…

OceanBase云数据库战略实施两年,受零售、支付、制造行业青睐

2022年OceanBase推出云数据库产品OB Cloud,正式启动云数据库战略。两年来OB Cloud发展情况如何&#xff0c;9月26日&#xff0c;OceanBase公有云事业部总经理尹博学向记者作了介绍。 尹博学表示&#xff0c;OB Cloud推出两年以来&#xff0c;已服务超过700家客户&#xff0c;客…

巧用时间换空间:解读 ArcGraph 如何灵活应对有限内存下的图分析

导读&#xff1a;ArcGraph 是一款云原生架构、存查分析一体化的分布式图数据库。本文将详细解读 ArcGraph 如何灵活应对有限内存下的图分析。 01 引言 在图分析技术广泛应用的当下&#xff0c;学术界和各大图数据库厂商热衷于提升图分析技术的高性能指标。然而&#xff0c;追求…

夹耳式耳机哪个牌子最好?夹耳式耳机品牌排行榜前十名

随着无线音频技术的不断进步&#xff0c;耳夹式蓝牙耳机因其独特的设计与便捷的使用体验&#xff0c;逐渐成为众多消费者的心头好。然而&#xff0c;在众多品牌与型号中选择一款既符合个人需求又能保证音质与舒适度的产品并非易事。为此&#xff0c;我们综合了市场反馈、用户评…

6天19颗卫星成功发射,厉害了我的国!

我国最近成功发射了“祁连一号”、“吉林一号”、天仪41星&#xff08;神启号&#xff09;和“吉林一号”SAR01A星&#xff0c;前后仅6天就有19颗卫星被送入了太空。 不禁让人感叹&#xff1a;“我们的征途是星辰与大海&#xff0c;厉害了我的国&#xff01;” “祁连一号”与…

Vue中使用Hls.js进行视频直播的播放

HLS.js使用文档 1、安装组件&#xff1a; npm install hls.js --save2、引入组件&#xff1a; import Hls from hls.js3、使用组件&#xff1a; // DOM&#xff1a; <video id"video" controls loop"false"></video> // DATA: let hls nul…

java项目之新闻稿件管理系统(源码+文档)

项目简介 新闻稿件管理系统实现了以下功能&#xff1a; 新闻稿件管理系统的主要使用者管理员功能有个人中心&#xff0c;用户管理&#xff0c;记者管理&#xff0c;审批员管理&#xff0c;新闻分类管理&#xff0c;新闻信息管理&#xff0c;系统管理等。记者发布新闻信息&…

【前端必读】二、使用 Cursor 的基本功能全教程(快捷键及其他功能)

【前端必读】一、使用 Cursor 的基本功能全教程&#xff08;使用与安装&#xff09; 【前端必读】二、使用 Cursor 的基本功能全教程&#xff08;快捷键及其他功能&#xff09; 快捷键及其功能 Cursor 提供了一些快捷键来使用相应的 AI 功能&#xff1a; CTRL/CMD L&#xf…

远程升级频频失败?原因竟然是…

最近有客户反馈在乡村里频繁出现掉线的情况。 赶紧排查原因&#xff01; 通过换货、换SIM卡对比排查测试&#xff0c;发现只有去年采购的那批模块在客户环境附近会出现掉线的情况&#xff0c;而今年采购的模块批次就不会掉线。。。 继续追究原因&#xff0c;联系对应的销售工…

【YOLO目标检测马铃薯叶病害数据集】共1912张、已标注txt格式、有训练好的yolov5的模型

目录 说明图片示例 说明 数据集格式&#xff1a;YOLO格式 图片数量&#xff1a;1912 标注数量(txt文件个数)&#xff1a;1912 标注类别数&#xff1a;5 标注类别名称&#xff1a; health General early blight Severe early blight General late blight Severe late bligh…

OPenCV源码编译 调试 注意事项教程(建议收藏)

为了更深入的学习和了解OPenCV的开源魅力&#xff0c;我们可以将OPenCV的源码进行编译&#xff0c;重新生成解决方案&#xff0c;得到二进制文件&#xff0c;或者修改原版官方的OpenCV代码&#xff0c;并编译后为自己所用&#xff0c;也可以编译后进入到源码中调试&#xff0c;…

桌面专业版【如何进入livecd救援模式拷贝数据】方法介绍

UOS统信在无法进入桌面、tty2或者忘记密码的情况下&#xff0c;如何进入livecd模式&#xff0c;从而实现对系统进行维护、备份数据等。 文章目录 功能概述操作方法步骤一&#xff1a;制作启动盘步骤二&#xff1a;从U盘启动步骤二&#xff1a;进入编辑模式步骤三&#xff1a;删…

线程LWP的概念和控制

一、线程的概念 课本&#xff1a;线程是比进程更加轻量化的一种执行流/线程是在进程内部执行的一种执行流 我们&#xff1a;线程是CPU调度的基本单位/进程是承担系统资源的基本实体 地址空间是进程的“资源”窗口&#xff0c;我们通过栈去访问我们的变量&#xff0c;堆去访问…

找不到concrt140.dll怎么修复,这4种方法可轻松搞定

1. concrt140.dll 定义 1.1 系统文件 concrt140.dll 是一个系统文件&#xff0c;属于 Windows 操作系统中重要的动态链接库&#xff08;DLL&#xff09;之一。它通常位于系统的 System32 或 SysWOW64 文件夹中&#xff0c;是 Microsoft Visual C 2015 Redistributable 包的一…

Spring Boot电商开发:购物商城系统

第2章 关键技术简介 2.1 Java技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xf…

3D 家庭室内设计软件Live Home 3D Pro for Mac

Live Home 3D Pro for Mac 是一款功能卓越的 3D 家庭室内设计软件&#xff0c;具有多方面的优势和特点&#xff1a; 软件下载地址 丰富的设计功能12&#xff1a; 平面图绘制&#xff1a;用户可以使用直观的点击式绘图工具创建详细的二维平面图。提供房间工具、圆弧和直墙工具…

【CSS】鼠标 、轮廓线 、 滤镜 、 堆叠层级

cursor 鼠标outline 轮廓线filter 滤镜z-index 堆叠层级 cursor 鼠标 值说明值说明crosshair十字准线s-resize向下改变大小pointer \ hand手形e-resize向右改变大小wait表或沙漏w-resize向左改变大小help问号或气球ne-resize向上右改变大小no-drop无法释放nw-resize向上左改变…