16-mini版WebGLBackground

源码:github.com/buglas/thre...

1-WebGLBackgroundMini的代码

src\renderers\webgl\WebGLBackgroundMini.js

javascript 复制代码
import { Color } from '../../math/Color.js';
​
/**
 * 背景
 * Mini 版使用固定黄色,完整版会根据 scene.background 渲染天空盒或纯色。
 */
function WebGLBackgroundMini( renderer, state ) {
    const clearColor = new Color( 0xffff00 );
    function render() {
        state.buffers.color.setClear( clearColor.r, clearColor.g, clearColor.b );
        renderer.clear();
    }
    return {
        render: render,
    };
}
​
export { WebGLBackgroundMini };

2-WebGLBackgroundMini的功能定位

WebGLBackground 是WebGL 渲染器里负责处理场景背景的模块。

WebGLRenderer 在初始化时会实例化WebGLBackground ,并对外暴露 setClearColor / setClearAlpha 等 API。

WebGLBackgroundMini 亦是如此,只是具体功能做了删减。

3-代码详解

WebGLBackgroundMini的代码很简单,其主要职责是:在每帧渲染开始前,把画布清成固定黄色,为后续绘制几何体提供背景。

scss 复制代码
function WebGLBackgroundMini( renderer, state ) {
    const clearColor = new Color( 0xffff00 );
    function render() {
        state.buffers.color.setClear( clearColor.r, clearColor.g, clearColor.b );
        renderer.clear();
    }
    return {
        render: render,
    };
}

工作流程:

  1. 创建时:保存 renderer 和 state,并定义清屏颜色 0xffff00(黄色)。

  2. render() 被调用时:

    • state.buffers.color.setClear(...):设置 WebGL 清屏颜色(经 WebGLStateMini 调用 gl.clearColor,相同颜色会跳过重复设置)。
    • renderer.clear():执行 gl.clear(COLOR_BUFFER_BIT),清空颜色缓冲区。

与完整版 WebGLBackground 的对比

能力 完整版 Mini 版
纯色背景 支持 scene.background = Color 固定黄色
纹理 / 天空盒 支持 scene.background = Texture 不支持
环境混合 / XR 支持 不支持
setClearColor / setClearAlpha 支持 不支持
深度 / 模板缓冲清屏 支持 不支持(只清颜色)

完整版会根据 scene.background 选择清屏颜色或绘制背景几何体;

Mini 版只保留「设置清屏色 + 清空画布」这一最小步骤。

小结

WebGLBackgroundMini 是一个约 20 行的工厂函数,返回 { render } 接口,与完整版 API 形状一致,便于 WebGLRendererMini 按同样方式挂载。

WebGLBackgroundMini 不做真正的「背景渲染」,只做固定黄色清屏,是精简渲染器里最小可用的背景处理实现。

相关推荐
2分钟速写快排5 小时前
孔乙己的茴字有多少种写法?|AI 对话实时通信的三种实现
前端·javascript·github
Penge6667 小时前
JavaScript:BOM 详解
前端
Penge6668 小时前
Vite vs Webpack:前端构建工具原理与实战
前端
Penge6668 小时前
前端包管理工具:npm、Yarn、pnpm 快速入门
前端
Penge6668 小时前
Sass 了解
前端
Penge6668 小时前
Webpack 打包从 0 到 1 实战笔记
前端
Penge6669 小时前
Webpack 入门:是什么、为什么需要、怎么使用?
前端
Penge6669 小时前
Ant Design(Antd)了解
前端
wangruofeng9 小时前
同一行代码,百种渲染:Asuka、React Native 与 Flutter 跨平台渲染机制深度拆解
前端·github
Penge66610 小时前
JavaScript 核心语法速通
前端