在 ThreeJs 中动态添加新的制服到材质中?

Fre*_*sen 2 uniform three.js

是否可以在 ThreeJs 中动态地向标准 MeshMaterial 添加新的制服?

像这样的东西:

material = new THREE.MeshPhongMaterial();
material.uniforms = {
  customTexture: new THREE.Texture(canvas),
  textureSize: { value: 1024 },
};
Run Code Online (Sandbox Code Playgroud)

我修改了一些 THREE.ShaderChunks,以便它能够在着色器中使用新的制服,但似乎在材质编译时新的制服被 Three.js 忽略......

Mug*_*n87 5

是否可以在 ThreeJs 中动态地向标准 MeshMaterial 添加新的制服?

是的。请查看以下示例:webgl_materials_modified

在此演示中,MeshNormalMaterial通过额外的统一time和一些顶点转换逻辑进行了增强。它使用Material.onBeforeCompile(),该方法在编译着色器程序之前立即执行。这是修改 中内置材质的推荐方法three.js