15-mini版WebGLMaterials

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

1-WebGLMaterialsMini的代码

src\renderers\webgl\WebGLMaterialsMini.js

scss 复制代码
/**
 * 将 JS 侧 Material 属性同步到 shader uniform 对象。
 * Mini 版仅处理 MeshMiniMaterial 的 diffuse(纯色)颜色。
 */
function WebGLMaterialsMini() {
    // 刷新材质的uniforms,uniforms 是WebGLUniformsMini的实例
    function refreshMaterialUniforms( uniforms, material ) {
        if ( material.isMeshMiniMaterial ) {
            uniforms.diffuse.value.copy( material.color );
        }
    }
    return {
        refreshMaterialUniforms: refreshMaterialUniforms
    };
}
​
export { WebGLMaterialsMini };

2-WebGLMaterialsMini的功能定位

WebGLMaterials 是WebGL 渲染管线中的"Material → Uniform 桥接层"。

WebGLMaterials 不负责编译 shader、也不直接上传 GPU,而是把 JavaScript 侧的 Material 属性,同步到 shader 对应的 uniforms 对象里,供 WebGLRenderer 后续调用 WebGLUniforms.upload() 上传到 GPU。

shader 对应的 uniforms 对象指的是在js里预定义的uniforms,这种uniforms是ShaderLib 中的uniforms 的深拷贝。

整体流程:

scss 复制代码
Material 属性变化
    ↓
WebGLMaterials.refreshMaterialUniforms()  更新js里预定义的uniforms
    ↓
WebGLUniforms.upload() 上传到 GPU

WebGLMaterialsMini 比较简单,只保留了其核心功能。

3-代码详解

WebGLMaterialsMini 只向外暴露了一个refreshMaterialUniforms 方法。

refreshMaterialUniforms 方法负责把 JavaScript 侧材质属性 同步到 shader uniform 对象,再交给 WebGLUniformsMini.upload() 上传到 GPU。

WebGLMaterialsMini 只处理MeshMiniMaterial 材质。

判断条件是 material.isMeshMiniMaterial,目前只同步一个属性:

  • JS 侧:MeshMiniMaterial.color
  • Shader 侧:uniform vec3 diffuse(见 meshmini.glsl.js
ini 复制代码
uniform vec3 diffuse;
void main() {
    pc_fragColor = vec4( diffuse, 1.0 );
}

Uniform 的初始定义在 ShaderLibMini.js

css 复制代码
mini: {
    uniforms: {
        diffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) }
    },

所以当你写 new MeshMiniMaterial({ color: 0xff0000 }) 时,这个模块会在每帧绘制前把红色同步到 GPU,片元着色器就能输出纯色。

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

对比项 WebGLMaterialsMini WebGLMaterials(完整版)
材质类型 MeshMiniMaterial Basic、Lambert、Phong、Standard、Node 等
同步内容 color → diffuse 贴图、光照、雾、透明度、环境贴图等
额外参数 pixelRatioheighttransmissionRenderTarget

完整版里类似逻辑在 refreshUniformsCommon 等函数中,Mini 版把这一层砍到最小,只保留「纯色网格」所需的一条路径。

总结

WebGLMaterialsMini.js 是 Mini 渲染器里的 材质 uniform 同步器:

setProgram 阶段把 MeshMiniMaterial.color 写入 diffuse uniform,让 meshmini 片元着色器能按材质颜色绘制纯色三角形。

功能很少,但它是「用户改 material.color → 屏幕变色」这条链路上不可缺少的一环。

相关推荐
无限压榨切图仔4 分钟前
一个优惠券需求改了三端,我才明白全栈不是多学一门语言
前端·后端
晚安日记wanna7 分钟前
批量请求失败只弹一个 Toast面试官想听五层
前端·面试·架构
晚安日记wanna15 分钟前
TS const 类型参数一道面试题的四层追问
前端·面试·typescript
用户9210802628618 分钟前
前端 Vue 专栏 09:Vue Router 与前端路由
前端
無限進步D1 小时前
Java Web 前端 简介
java·开发语言·前端·css·html·css3·web
码士集团小青1 小时前
从落地到“半停用“:qiankun 微前端在一个 Vue 3 + Vite 项目中的完整实践与反思
前端
the局外人1 小时前
掌控自己的 K 线数据:TradingView 本地部署与数据源接入
前端·vue.js·websocket
deli0072 小时前
配色对比度检查器:一眼看清文字和背景谁看不清
前端
梦诺2 小时前
vue3 keepAlive+记录滚动条
前端·javascript·vue.js
葡萄城技术团队2 小时前
SpreadJS V19.2 新特性揭秘:甘特表的进度线
前端