前言
本文将和大家聊点threejs的材质
玻璃杯,水,冰块渲染介绍自定义混合方程常量
完成基础代码
1 | // 导入threejs |

添加模型和gui
1 | // 实例化加载器gltf |

属性介绍
blendEquation混合方程
这个用于指定在处理混合(blend)效果时使用何种类型的方程式
- THREE.AddEquation(加法方程)
- THREE.SubtractEquation(减法方程)
- THREE.ReverseSubtractEquation(反向减法方程)
- THREE.MinEquation(最小方程)
- THREE.MaxEquation(最大方程)
上述这些常量对应于源代码中的枚举值,要理解其具体含义,我们得了解GL混合方程式定义:其中GLenum mode可取值见下表:1
glBlendEquation(GLenum mode);
GL_FUNC_ADD Cf = (Cs * S)+(Cd * D) GL_FUNC_SUBTRACT Cf = (Cs * S)-(Cd * D) GL_FUNC_RESERSE_SUBTRACT Cf = (Cd * D)-(Cs * S) GL_MIN Cf = min(Cs,Cd) GL_MAX Cf = max(Cs,Cd)
- Cf表示混合后显示的颜色
- Cd混合前颜色缓冲中已经有的颜色值
- Cs将要绘制的颜色
- S为glBlendFunc函数设置时的第一个参数,源颜色因子
- D为glBlendFunc函数设置时的第二个参数,目标颜色因子
blendSrc源因子
- THREE.ZeroFactor(对应于GL_ZERO,表示使用0.0作为因子,实际上相当于不使用这种颜色参与混合运算)
- THREE.OneFactor(GL_ONE,表示使用1.0作为因子,实际上相当于完全的使用了这种颜色参与混合运算)
- THREE.SrcColorFactor(GL_SRC_COLOR,表示使用源颜色的四个分量分别作为因子的四个分量)
- THREE.OneMinusSrcColorFactor(GL_ONE_MINUS_SRC_COLOR,表示使用1.0减去源颜色的四个分量分别作为因子的四个分量)
- THREE.SrcAlphaFactor(GL_SRC_ALPHA,表示使用源颜色的alpha值来作为因子。)
- THREE.OneMinusSrcAlphaFactor(GL_ONE_MINUS_SRC_ALPHA,表示用1.0减去源颜色的alpha值来作为因子)
- THREE.DstAlphaFactor(GL_DST_ALPHA,表示使用目标颜色的alpha值来作为因子。)
- THREE.OneMinusDstAlphaFactor(GL_ONE_MINUS_DST_ALPHA,表示用1.0减去目标颜色的alpha值来作为因子。)
- THREE.DstColorFactor
- THREE.OneMinusDstColorFactor
- THREE.SrcAlphaSaturateFactor
blendDst目标因子
- THREE.ZeroFactor(对应于GL_ZERO,表示使用0.0作为因子,实际上相当于不使用这种颜色参与混合运算)
- THREE.OneFactor(GL_ONE,表示使用1.0作为因子,实际上相当于完全的使用了这种颜色参与混合运算)
- THREE.SrcColorFactor(GL_SRC_COLOR,表示使用源颜色的四个分量分别作为因子的四个分量)
- THREE.OneMinusSrcColorFactor(GL_ONE_MINUS_SRC_COLOR,表示使用1.0减去源颜色的四个分量分别作为因子的四个分量)
- THREE.SrcAlphaFactor(GL_SRC_ALPHA,表示使用源颜色的alpha值来作为因子。)
- THREE.OneMinusSrcAlphaFactor(GL_ONE_MINUS_SRC_ALPHA,表示用1.0减去源颜色的alpha值来作为因子)
- THREE.DstAlphaFactor(GL_DST_ALPHA,表示使用目标颜色的alpha值来作为因子。)
- THREE.OneMinusDstAlphaFactor(GL_ONE_MINUS_DST_ALPHA,表示用1.0减去目标颜色的alpha值来作为因子。)
- THREE.DstColorFactor
- THREE.OneMinusDstColorFactor
blendSrcAlpha源透明度
- THREE.ZeroFactor
- THREE.OneFactor
- THREE.SrcColorFactor
- THREE.OneMinusSrcColorFactor
- THREE.SrcAlphaFactor
- THREE.OneMinusSrcAlphaFactor
- THREE.DstAlphaFactor
- THREE.OneMinusDstAlphaFactor
- THREE.DstColorFactor
- THREE.OneMinusDstColorFactor
- THREE.SrcAlphaSaturateFactor
blendDstAlpha目标透明度
- THREE.ZeroFactor
- THREE.OneFactor
- THREE.SrcColorFactor
- THREE.OneMinusSrcColorFactor
- THREE.SrcAlphaFactor
- THREE.OneMinusSrcAlphaFactor
- THREE.DstAlphaFactor
- THREE.OneMinusDstAlphaFactor
- THREE.DstColorFactor
- THREE.OneMinusDstColorFactor
效果图
可以通过这些属性调整冰块,水,杯子的渲染逻辑,具体的需要大家去实践操作
这里我截图几张给大家看下


裁剪平面
创建模型
1 | let rgbeLoader = new RGBELoader(); |

创建裁剪平面
1 | // 创建裁剪平面 |

添加gui设置裁剪
1 | // 创建裁剪平面 |

裁剪场景
1 | // 创建GUI |

模板渲染
1 | // 创建1个平面 |
金属裁切
这里就是使用模板渲染的逻辑实现的裁切功能
1 | // 创建GUI |

好了,本文到这里就结束了,下次再见