WebGLRenderTarget

WebGLRenderTarget

3D虚拟工厂在线体验

描述

  • WebGLRenderTarget 是 Three.js 中的一个类,用于创建离屏渲染缓冲区(Offscreen Render Target),允许将 3D 场景渲染到纹理(Texture)而不是直接渲染到屏幕。
    • 主要用途:
      • 后期处理(Post-processing):如模糊、辉光、色调映射等效果(结合 EffectComposer 使用)。
      • 阴影映射(Shadow Mapping):存储深度信息以计算动态阴影。
      • 反射/折射(Reflections/Refractions):渲染环境到纹理以实现镜面或玻璃效果。
      • 多通道渲染(Multi-pass Rendering):用于复杂的光照或自定义渲染流程。
    • 核心特点:
      • 可自定义 尺寸(width/height) 和 纹理参数(如过滤模式、格式等)。
      • 支持 深度缓冲区(depthBuffer) 和 模板缓冲区(stencilBuffer)。
      • 可选 多重采样抗锯齿(MSAA)(通过 samples 属性)。
      • 可存储为普通纹理(texture)或深度纹理(depthTexture)。

构造器

参数类型描述默认值
widthNumber渲染目标的宽度1
heightNumber渲染目标的高度1
optionsObject配置纹理参数和缓存的选项对象-
options.wrapS-纹理水平环绕方式ClampToEdgeWrapping
options.wrapT-纹理垂直环绕方式ClampToEdgeWrapping
options.magFilter-纹理放大过滤器LinearFilter
options.minFilter-纹理缩小过滤器LinearFilter
options.generateMipmapsBoolean是否生成mipmapsfalse
options.format-纹理格式RGBAFormat
options.type-纹理数据类型UnsignedByteType
options.anisotropyNumber各向异性过滤级别1
options.colorSpace-颜色空间NoColorSpace
options.internalFormat-内部格式null
options.depthBufferBoolean是否使用深度缓冲区true
options.stencilBufferBoolean是否使用模板缓冲区false
options.resolveDepthBufferBoolean是否解析深度缓冲区true
options.resolveStencilBufferBoolean是否解析模板缓冲区true
options.samplesNumber多重采样数0
options.countNumber渲染目标数量1

属性

属性类型描述默认值
.isWebGLRenderTargetBoolean是否为WebGLRenderTarget类型(只读)-
.widthNumber渲染目标宽度-
.heightNumber渲染目标高度-
.scissorVector4视口内的剪裁区域-
.scissorTestBoolean是否启用剪裁测试-
.viewportVector4渲染目标的视口-
.textureTexture存储渲染像素的纹理-
.texturesArray<Texture>多渲染目标配置的纹理数组-
.depthBufferBoolean是否渲染到深度缓冲区true
.stencilBufferBoolean是否渲染到模板缓冲区false
.resolveDepthBufferBoolean是否解析多采样深度缓冲区true
.resolveStencilBufferBoolean是否解析多采样模板缓冲区true
.depthTextureDepthTexture存储场景深度的纹理null
.samplesNumber多重采样数0

方法

方法参数返回类型描述
.setSizewidth: Number, height: Numbernull设置渲染目标尺寸
.clone-WebGLRenderTarget创建渲染目标的副本
.copysource: WebGLRenderTargetthis复制传入目标的配置
.dispose-null释放资源

继承方法(来自 EventDispatcher

  • .addEventListener
  • .hasEventListener
  • .removeEventListener
  • .dispatchEvent

示例

import * as THREE from 'three';
import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js';
import { RenderPass } from 'three/addons/postprocessing/RenderPass.js';
import { BloomPass } from 'three/addons/postprocessing/BloomPass.js';

// 1. 初始化 WebGLRenderer
const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

// 2. 创建场景和相机
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.z = 5;

// 3. 添加一个测试物体(发光球体)
const sphere = new THREE.Mesh(
  new THREE.SphereGeometry(1, 32, 32),
  new THREE.MeshBasicMaterial({ color: 0x00ff00 })
);
scene.add(sphere);

// 4. 创建 WebGLRenderTarget(可自定义尺寸和参数)
const renderTarget = new THREE.WebGLRenderTarget(
  window.innerWidth,
  window.innerHeight,
  {
    minFilter: THREE.LinearFilter,
    magFilter: THREE.LinearFilter,
    format: THREE.RGBAFormat,
    stencilBuffer: false, // 不需要模板缓冲区时可关闭
  }
);

// 5. 创建 EffectComposer,并绑定 renderTarget
const composer = new EffectComposer(renderer, renderTarget);

// 6. 添加渲染通道(RenderPass)
composer.addPass(new RenderPass(scene, camera));

// 7. 添加 Bloom 辉光效果
const bloomPass = new BloomPass(
  1.5,    // 强度
  25,     // 模糊半径
  4,      // 迭代次数
  0.5     // 亮度阈值
);
composer.addPass(bloomPass);

// 8. 渲染循环
function animate() {
  requestAnimationFrame(animate);
  sphere.rotation.x += 0.01;
  sphere.rotation.y += 0.01;
  composer.render(); // 使用 composer 渲染(而非 renderer.render)
}
animate();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

3D虚拟工厂

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值