12-mini版WebGLObjects

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

1-WebGLObjectsMini的代码

src\renderers\webgl\WebGLObjectsMini.js

php 复制代码
/**
 * 物体级几何体更新:从 Mesh 取出 geometry,触发 GPU buffer 同步。
 * geometries: WebGLGeometriesMini
 */
function WebGLObjectsMini( geometries ) {
    //object:Mesh
    function update( object ) {
        // 从Mesh中取出geometry
        const geometry = object.geometry;
        // 从geometries中取出buffergeometry
        const buffergeometry = geometries.get( geometry );
        // 更新buffergeometry
        geometries.update( buffergeometry );
        // 返回buffergeometry
        return buffergeometry;
    }
    return {
        update: update
    };
}
​
export { WebGLObjectsMini };

2-WebGLObjectsMini 的功能定位

WebGLObjects 是WebGL 渲染器里的一个对象更新协调器。

在真正绘制某个 Object3D 之前,WebGLRenderer 会调用它的 update(object),确保该物体相关的 GPU 数据已经准备好。

WebGLObjects 的整体定位:

arduino 复制代码
场景遍历 (projectObject)
    ↓
objects.update(mesh)          ← WebGLObjectsMini
    ↓
geometries.get + update       ← WebGLGeometriesMini
    ↓
attributes.update             ← WebGLAttributesMini(真正写 GPU buffer)
    ↓
渲染列表 → renderBufferDirect → drawArrays

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

WebGLObjectsMini 的核心职责:在渲染前,把 Mesh 上的 geometry 同步到 GPU。它本身不直接操作 WebGL,而是委托给 WebGLGeometriesMini。

3-update() 方法

ini 复制代码
function update( object ) {
    const geometry = object.geometry;
    const buffergeometry = geometries.get( geometry );
    geometries.update( buffergeometry );
    return buffergeometry;
}

update 做三件事:

  1. 调用object.geometry,从 Mesh 取出几何体。
  2. 调研geometries.get(geometry),注册/获取几何体,首次会挂 dispose 监听。
  3. geometries.update(buffergeometry),把 position 等 attribute 上传到 GPU。

4-与完整版 WebGLObjects.js 的对比

完整版更复杂,Mini 版只保留了最基础路径:

能力 WebGLObjectsMini WebGLObjects(完整版)
基础 Mesh 几何体更新 ✅ ✅
每帧只更新一次(WeakMap + frame) ❌ 每次遍历都调 update ✅
InstancedMesh(实例矩阵) ❌ ✅
SkinnedMesh(骨骼) ❌ ✅
geometries.get(object, geometry) 只传 geometry 传 object 和 geometry
相关推荐
Dovis(誓平步青云)4 分钟前
导览音频切换太快,旧讲解不能覆盖新展品
android·前端·javascript·ecmascript·音视频·宠物
沧沧凉凉10 小时前
一段需求、零素材,Claude Code 派了 33 个代理给我做了个 3D 动作游戏
游戏·ai编程·three.js
福兮说11 小时前
设计稿是 #4A7C6F,页面量出来是 #4B7C6F:HEX、HSL、透明度、canvas 来回转的七个坑
前端·javascript·css·canvas
郑州光合科技余经理11 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
小呆呆66612 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
Dovis(誓平步青云)12 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
码艺-Alimjan13 小时前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js
可乐鸡翅yeah_13 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒14 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
广州华水科技14 小时前
大坝安全监测解决方案:单北斗GNSS形变监测系统应用与维护
前端