[Threejs]环境光与HDR贴图
本文主要记录了一次通过结合环境光与HDR贴图来实现3D场景的渲染。(Threejs版本 r0.118.0)
- 依赖包的导入
import {Scene,PerspectiveCamera,Color,WebGLRenderer,LinearToneMapping,AmbientLight,Vector3,Group,PMREMGenerator,UnsignedByteType,HemisphereLight,
} from 'three';
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'; // 控制器
import { GLTFLoader, GLTF } from 'three/examples/jsm/loaders/GLTFLoader'; // gltf文件加载
import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader';
- 添加环境光
// this.scene = ...
this.scene.add(new AmbientLight(0xffffff, 1));const hemiLight = new HemisphereLight(0xffffff, 0x000000, 1);
hemiLight.position.set(0, 100, 0);
this.scene.add(hemiLight);
- 设置WebGLRenderer
// this.threeContainer = document.getElementById(
// 'xxxx'
// ) as HTMLElement;
this.renderer = new WebGLRenderer({ antialias: true, alpha: true });
this.renderer.context.getShaderInfoLog = () => '';
this.renderer.setSize(this.threeContainer.scrollWidth,this.threeContainer.scrollHeight
);
this.renderer.setPixelRatio(devicePixelRatio);
this.renderer.toneMapping = LinearToneMapping;
this.renderer.toneMappingExposure = 1; // 曝光系数
- 加载HDR贴图
// import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader';
const pmremGenerator = new PMREMGenerator(this.renderer); // 使用hdr作为背景色
pmremGenerator.compileEquirectangularShader();const scene = this.scene;
new RGBELoader().setDataType(UnsignedByteType).load('/env/railway_bridge_02_1k.hdr', function (texture) {const envMap = pmremGenerator.fromEquirectangular(texture).texture;// envMap.isPmremTexture = true;pmremGenerator.dispose();scene.environment = envMap; // 给场景添加环境光效果scene.background = envMap; // 给场景添加背景图});
- 加载GLTF模型
// ...
this.loader = new GLTFLoader();
this.loader.load('/model/haballoon.glb', (obj: GLTF) => {obj.scene.name = 'haballoon';obj.scene.scale.set(10, 10, 10);this.scene.add(obj.scene);
});
- 渲染效果
资源文件参考: - 模型: https://sketchfab.com/3d-models/hot-air-balloon-0ac634b7c45b4269ab6c570283b9617c
- HDRI: https://hdrihaven.com/hdri/?h=railway_bridge_02
[Threejs]环境光与HDR贴图相关推荐
- threejs基础下:贴图资源加载与光照
优先更新个人博客,求关注~~ 个人博客:https://jinglecjy.github.io/ 加载器Loaders 加载器是threejs中很重要的一个步骤,可以用于加载纹理/图片/模型/音频等资 ...
- vue + threejs 实现场景环境贴图,模型高光显示效果
<template><div class="modelsBox"><div class="modelsBox_wrapper"&g ...
- threejs 粒子系统和材质贴图
例子系统 <!DOCTYPE html> <html lang="en"><head><title>three.js webgl - ...
- Threejs使用白底贴图时,显示出来的图片为灰底
使用texture加载白色底图片作为MeshBasicMaterial的map,显示出来的图片则变为灰底,还未找到原因,但是是 this.renderer.toneMapping = THREE.AC ...
- threejs正方体六面贴图
给正方体六面贴上不同纹理 最终效果 目录结构 index.html <!DOCTYPE html> <html lang="en"> <head> ...
- threejs -- 文本制成精灵贴图(弹幕效果)
效果: 代码: 注:input标签不能与OrbitControls.js共同使用 <html lang="en"><head><title>th ...
- threejs学习网址记录
14.thingJS:https://www.thingjs.com/guide/city2/?campaign_id=636109562&utm_campaign=ThingJS&u ...
- 李翔C4D案例教程笔记(未完)
闹钟 建模: 铃铛: 球体 >> 半球体 对称方法: 用对称生成器 用Ctrl复制后,更改坐标,先将对象坐标改为世界坐标,关于X轴对称,就将X轴的值相反,将相应旋转值相反 金属提手细节: ...
- 元宇宙 3D 开荒场 - 探味奇遇记
项目概览及开发设计 这次尝鲜的业务伙伴是食品部门,最终落地项目是"探味奇遇记":用户使用左边"joystick"操作 IP 人物,前往自己感兴趣的美食馆.调整当 ...
- threejs视频教程学习(4):贴图、材质、光线
获取材质贴图(3d模型) https://www.poliigon.com/ https://www.textures.com/ https://www.qingmo.com/ https://pix ...
最新文章
- 安卓手机也能跑YOLOv5了!
- python对文件的读操作有哪些方法-Python中文件的读取和写入操作
- Drawable 详解
- python打包成apk界面设计_Stephen的SEM博客
- ActiveReports 9 新功能:借助目录(TOC)控件为报表添加目录功能
- C# 的未来:主构造函数
- 工作179:接口对接
- chrome调试、移动端调试
- python小例子之8 -- decorator的使用
- 安装计算机的更新每次更新失败,win7电脑自动更新失败怎么办,电脑自动更新失败解决方法...
- cmd查看mysql版本_mysql安装-必会
- Txt格式的电子书解析
- MATLAB绘制散点图
- web自动化(Python版)之百度登录
- 18个最受欢迎的低代码开发平台【开源】
- cadence常用软件模块介绍
- sc-RNA seq与Illumina测序
- Rust学习笔记(14)——struct、Option和Box组合应用实现单向链表之二
- php 实现店铺装修6
- 智慧校园总体规划方案
热门文章
- 工作流引擎厂商有哪些_国内主要工作流厂商分析
- 图像测试环境软件,Digimizer(图像测量分析软件)
- 测试游戏帧率电脑温度的软件,游戏中显示帧数和温度方法_游戏画面中实时显示FPS帧数温度技巧...
- 二叉链表存储的二叉C语言,C语言实现二叉链表存储
- 适用于Chrome类浏览器的喜马拉雅音频下载插件
- 怎样在公式编辑器中输入空格?
- mt65xx android phone win10驱动,mt65xx android phone驱动
- python控制浏览器最小化_如何启动最小化的Selenium Firefox web浏览器?
- 华为NP课程笔记24-BFD
- DevExpress WinForms v20.2版本亮点放送——PDF Viewer功能加强