当前位置: 首页 > news >正文

three.js 第八节 - gltf加载器、解码器


// @ts-nocheck
// 引入three.js
import * as THREE from 'three'
// 导入轨道控制器
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
// 导入hdr加载器(专门加载hdr的)
import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader.js'
// 导入gltf加载器
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'
// 导入解码器(在node_modules/three/examples/jsm/libs/draco这里,但是,我们需要把draco文件夹复制到pbulic文件夹种)
import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js'//#region
const scence = new THREE.Scene()const camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000)
// 设置相机位置
camera.position.set(5, 2, 2)
// camera.lookAt(0, 0, 0)const renderer = new THREE.WebGLRenderer()
renderer.setSize(window.innerWidth / 2, window.innerHeight / 2)
document.body.appendChild(renderer.domElement)
//#endregion// -----------------------------------------------------------------
// -----------------------------------------------------------------// 实例化gltf加载器const gltfLoader = new GLTFLoader()gltfLoader.load(// 模型路径'../public/assets/model/Duck.glb', // (这个模型是没有经过压缩的,所以不需要使用解码器)// 加载完成的回调gltf => {console.log('gltf-Duck=', gltf)scence.add(gltf.scene)})// 实例化解码器dracoconst dracoLoader = new DRACOLoader()// 设置draco路径dracoLoader.setDecoderPath('../public/draco/') // 这里的路径必须进入draco文件夹中【../public/draco/】,否则报错// 设置gltf加载器的解码器gltfLoader.setDRACOLoader(dracoLoader)gltfLoader.load(// 模型路径/*因为`city.glb`是压缩过的,不使用解码器的话就会报错:Error: THREE.GLTFLoader: No DRACOLoader instance provided.所以,就需要解压缩咯*/'../public/assets/model/city.glb',// 加载完成的回调gltf => {console.log('gltf-city=', gltf)scence.add(gltf.scene)})// 加载环境贴图
const rgbeLoader = new RGBELoader()
rgbeLoader.load('../public/assets/texture/Alex_Hart-Nature_Lab_Bones_2k.hdr', (envMap) => {// 设置球形贴图,否则环境贴图就像一个背景图片似的envMap.mapping = THREE.EquirectangularReflectionMapping// 设置环境贴图scence.environment = envMap
})// 场景fog
scence.fog = new THREE.Fog(0x999999, 0.1, 50) // 参数一:雾的颜色灰色;从0.1米到50米处雾会越来越浓// 指数fog
// scence.fog = new THREE.FogExp2(0x999999, 0.1) // 参数一:雾的颜色灰色;参数二:雾变浓的速度// 给场景scence一个背景颜色(场景的背景色最好是雾的颜色一致),查看雾的效果会更好
scence.background = new THREE.Color(0x999999)// -----------------------------------------------------------------
// -----------------------------------------------------------------//#region
// 添加世界坐标辅助器,红色-X轴; 绿色-Y轴; 蓝色-Z轴
const axesHelper = new THREE.AxesHelper(5)
scence.add(axesHelper)const controls = new OrbitControls(camera, renderer.domElement)
// 设置带阻尼的惯性
// controls.enableDamping = true
// 设置阻尼系数
controls.dampingFactor = 0.05// 每一帧根据控制器更新画面
function render() {// 如果,需要控制器带有阻尼效果,或者自动旋转等效果,就需要加入`controls.update()`controls.update()// `requestAnimationFrame`:在屏幕渲染下一帧画面时,触发回调函数来执行画面的渲染requestAnimationFrame(render)renderer.render(scence, camera)
}
render()
//#endregion

在这里插入图片描述

相关文章:

  • Linux_内核缓冲区
  • 高斯算法的原理及其与常规求和方法的区别
  • 计算机系统基础实训七-MallocLab实验
  • vmware虚拟机安装ubuntu20.04
  • 9、Spring之Bean生命周期~依赖注入(总)
  • python入门基础知识(错误和异常)
  • 兴顺物流管理系统的设计
  • 从开源EPR产品Odoo学习
  • Java之Hutool/Guava/Apache Commons工具包项目实践
  • Node.js 渲染三维模型并导出为图片
  • 后仿真中的 《specify/endspecify block》之(5)使用specify进行时序仿真
  • 【区分vue2和vue3下的element UI Descriptions 描述列表组件,分别详细介绍属性,事件,方法如何使用,并举例】
  • GPT-4o一夜被赶超,Claude 3.5一夜封王|快手可灵大模型推出图生视频功能|“纯血”鸿蒙大战苹果AI|智谱AI“钱途”黯淡|月之暗面被曝进军美国
  • 4、MFC:菜单栏、工具栏与状态栏
  • CompletableFuture 基本用法
  • Angular6错误 Service: No provider for Renderer2
  • Asm.js的简单介绍
  • java中具有继承关系的类及其对象初始化顺序
  • MYSQL 的 IF 函数
  • node-glob通配符
  • node学习系列之简单文件上传
  • Redux 中间件分析
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • spring学习第二天
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 从伪并行的 Python 多线程说起
  • 读懂package.json -- 依赖管理
  • 关于 Cirru Editor 存储格式
  • 汉诺塔算法
  • 后端_ThinkPHP5
  • 基于Android乐音识别(2)
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 前端设计模式
  • 使用API自动生成工具优化前端工作流
  • 小李飞刀:SQL题目刷起来!
  • NLPIR智能语义技术让大数据挖掘更简单
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​香农与信息论三大定律
  • # 达梦数据库知识点
  • $ git push -u origin master 推送到远程库出错
  • ${factoryList }后面有空格不影响
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (Matlab)使用竞争神经网络实现数据聚类
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (笔记)M1使用hombrew安装qemu
  • (定时器/计数器)中断系统(详解与使用)
  • (六)Flink 窗口计算
  • (万字长文)Spring的核心知识尽揽其中
  • (一)插入排序
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)Sql Server 保留几位小数的两种做法