RGBELoader
是Three.js中的一个实用类,用于加载高动态范围(HDR)环境贴图,它通常用于创建更逼真的光照和反射效果。HDR环境贴图以Radiance(.hdr)格式存储,能够表示更广泛的亮度范围,从而在渲染逼真场景时提供更准确的光源和反射效果。
参数和默认值:
manager
(可选): 这是用于加载资源的THREE.LoadingManager
对象。如果不提供此参数,默认将使用全局的[THREE.DefaultLoadingManager](https://www.wanjunshijie.com/note/threejs/6719.html)
。
var loader = new THREE.RGBELoader(manager);
dataType
(可选): 指定加载的数据类型。在Three.js中,THREE.UnsignedByteType
和THREE.FloatType
可用,它们分别对应于无符号字节和浮点数。浮点数类型允许更高精度的数据,但需要更多内存。默认值为THREE.UnsignedByteType
。
loader.setDataType(THREE.FloatType);
hdrTest
(可选): 一个可选的函数,用于测试文件是否为HDR文件。如果不提供此函数,RGBELoader
将使用默认的测试函数。
loader.hdrTest = function(buffer) {
// 自定义HDR测试逻辑
// 返回true如果是HDR文件,否则返回false
};
format
(可选): 用于指定加载HDR贴图时的目标像素格式。在Three.js中,THREE.RGBAFormat
和THREE.RGBEFormat
可用。THREE.RGBEFormat
使用更紧凑的压缩格式来存储HDR数据,默认值为THREE.RGBAFormat
。
loader.format = THREE.RGBEFormat;
这些是RGBELoader
的常用参数。你可以根据需要设置这些参数来适应你的场景和贴图加载要求。
使用实例
使用RGBELoader
时,需要在HTML文件中引入Three.js库。可以通过以下方式添加一个script
标签:
<script src="path/to/three.min.js"></script>
在引入Three.js后,你可以开始使用RGBELoader
来加载HDR环境贴图。下面是一个基本示例,演示如何使用RGBELoader
在Three.js场景中设置HDR环境光照:
<!DOCTYPE html>
<html>
<head>
<title>Three.js HDR环境贴图</title>
<style>
body { margin: 0; }
canvas { display: block; }
</style>
</head>
<body>
<script src="path/to/three.min.js"></script>
<script src="path/to/RGBELoader.js"></script>
<script>
var scene, camera, renderer;
// 初始化场景、相机和渲染器
function init() {
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
}
// 加载并设置HDR环境贴图
function loadEnvironmentMap() {
var loader = new THREE.RGBELoader();
loader.setDataType(THREE.UnsignedByteType); // 使用UnsignedByteType可以提高性能
loader.load('path/to/your-hdr-environment-map.hdr', function (texture) {
var pmremGenerator = new THREE.PMREMGenerator(renderer);
var envMap = pmremGenerator.fromEquirectangular(texture).texture;
scene.environment = envMap;
texture.dispose();
pmremGenerator.dispose();
render();
});
}
// 渲染循环
function render() {
renderer.render(scene, camera);
}
// 处理窗口大小变化
function onWindowResize() {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
render();
}
init();
loadEnvironmentMap();
window.addEventListener('resize', onWindowResize);
</script>
</body>
</html>
在这个示例中,请用实际的HDR环境贴图文件路径替换'path/to/your-hdr-environment-map.hdr'
。
代码设置了一个基本的Three.js场景,包括一个透视相机和一个WebGL渲染器。然后使用RGBELoader
加载HDR环境贴图,并通过scene.environment
将其设置为场景的环境贴图。PMREMGenerator
用于为环境贴图生成预过滤贴图,以提高渲染质量。
请确保用实际的Three.js库路径和RGBELoader.js
路径替换'path/to/three.min.js'
和'path/to/RGBELoader.js'
。
通过以上设置,你的场景将拥有基于HDR环境贴图的逼真光照和反射效果,大大提升了3D场景的视觉质量。