首页 > 其他分享 >three.js 第八节 - gltf加载器、解码器

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

时间:2024-06-22 16:01:02浏览次数:3  
标签:const scence THREE three 解码器 new 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)
	  }
	)

	// 实例化解码器draco
	const 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

在这里插入图片描述

标签:const,scence,THREE,three,解码器,new,js,gltf
From: https://blog.csdn.net/pig_ning/article/details/139883573

相关文章

  • three.js 第九节 - 光线投射实现3d物体交互事件
    这个程序的效果是,创建3个球,位置分别在-4,0,4的位置,并且,点击哪个球,哪个球的颜色就变成红色//@ts-nocheck//引入three.jsimport*asTHREEfrom'three'//导入轨道控制器import{OrbitControls}from'three/examples/jsm/controls/OrbitControls'//#regionconst......
  • three.js+vue实现酷炫三维地图web3d大屏可视化GIS地图
    三维地图效果如下,gif压缩导致画质变差了,哈哈three.js+vue代码如下:<template><divid="chinaMap"><divid="threejs"></div><!--右侧按钮--><divclass="rightButton"><divv-for="(item,i......
  • js函数定义方式
    在JavaScript中,有多种方式来定义函数。下面是几种常见的函数定义方式的详细解析和示例代码:函数声明(FunctionDeclaration):函数声明是最常见且最简单的函数定义方式。它由关键字function、函数名、参数列表和函数体组成。函数声明可以在任何地方进行定义,并且会被提升到作用域的......
  • js组合继承
    JS组合继承(combinationinheritance)是一种常用的继承模式,它通过将原型链和构造函数组合使用来实现继承。下面是JS组合继承的详细解析和代码示例:创建父类(基类)的构造函数functionParent(name){this.name=name;this.colors=['red','green','blue'];}给父类添......
  • 前端网页开发学习(HTML+CSS+JS)有这一篇就够!
    目录HTML教程▐ 概述▐ 基础语法▐ 文本标签▐ 列表标签 ▐ 表格标签▐ 表单标签CSS教程▐概述▐基础语法▐选择器▐修饰文本▐修饰背景▐透明度▐伪类▐盒子模型▐ 浮动▐ 定位JavaScript教程▐概述▐ 基础语法▐函数▐事件▐......
  • 安装和使用nvm安装Nodejs
    文章目录安装和使用nvm1.安装nvm2.重新加载终端配置3.安装所需的Node.js版本4.使用安装的Node.js版本nvm常用命令安装和使用nvm以下是安装nvm并使用它来安装Node.js的步骤:1.安装nvm首先,您需要安装nvm。您可以使用curl或wget来完成安装:......
  • 基于SSM+JSP的校园闲置物品交易平台(带1w+字文档)
    基于SSM+JSP的校园闲置物品交易平台(带1w+字文档)该校园闲置物品交易平台在Windows平台下完成开发,采用java编程语言开发,将应用程序部署于Tomcat上,加之MySQL接口来实现交互式响应服务器上的数据,将最终效果呈现于服务器上。运用MySQL数据库,使用Navicatpremium连接数据库,从......
  • Json工具类
    publicstaticclassJsonHelper{///<summary>///将对象序列化为JSON格式///</summary>///<paramname="o">对象</param>///<returns>json字符串</returns>publicstaticstringSerializeObject(object......
  • Java爬虫入门(2) Jsoup使用
    Jsoup介绍:    一款Java对html的解析工具。Jsoup的基础使用:    导入Maven依赖:                <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.11.3</version></dependency>......
  • 对JSONUtil.toBean()的理解
    在Java中,JSONUtil.toBean()​方法的作用是将JSON格式的数据转换为Java对象。这个方法通常属于一些JSON处理库(例如Hutool库中的JSONUtil),它提供了便捷的方式将JSON字符串中的数据映射到Java对象的相应属性上。这样可以使得开发者能够以面向对象的方式处理JSON数据,而无需手动解析JSO......