Babylon.js 第24章 混合模式

发布于:2022-12-24 ⋅ 阅读:(481) ⋅ 点赞:(0)

在 alpha 混合网格的情况下,新像素不会简单地覆盖现有像素:它们根据网格的透明度进行组合。这是可用的最简单混合操作的一个示例(也是默认操作):BABYLON.Engine.ALPHA_COMBINE.

可用的混合模式:

混合模式 影响 附加信息
BABYLON.Engine.ALPHA_COMBINE 这是 alpha 混合网格的默认混合模式。混合由正在绘制的像素的 alpha 值调制。 这是默认的混合模式。
BABYLON.Engine.ALPHA_ADD 这种混合模式将有效地添加新像素和现有像素值,发出鬼影效果并照亮网格后面的内容。
BABYLON.Engine.ALPHA_SUBTRACT 从现有像素值中减去新像素值,产生“反转颜色”效果。 混合不受alpha 值调制。
BABYLON.Engine.ALPHA_MULTIPLY 新的和现有的像素值相乘,因此渲染网格背后的内容变暗。这或多或少与 ALPHA_ADD 效果相反。 混合不受alpha 值调制。
BABYLON.Engine.ALPHA_MAXIMIZED 此混合模式类似于 ALPHA_ADD,但会发出不那么鲜艳和饱和的效果。
BABYLON.Engine.ALPHA_ONEONE 这种混合模式与 ALPHA_ADD 非常相似,只是它不受 alpha 值的调制。内部用于各种视觉效果。 混合不受alpha 值调制。

请注意,混合操作实际上是对像素值的 R、G 和 B 分量分别进行的简单数学运算,每个分量都介于 0 和 1 之间。因此,具有绿色网格(R=0,G=1, B=0) 设置用 ALPHA_SUBTRACT 绘制在黄色 (R=1, G=1, B=0) 上将发出红色值 (R=1, G=0, B=0)。

使用混合模式是通过操纵alphaMode材料的属性来完成的,将其设置为上面列出的常数之一。

仅当渲染的网格是 alpha 混合时才使用此属性。这非常重要,因为该alphaMode属性对不透明网格完全没有影响,因此您需要确保您的网格经过alpha 混合才能使用它。

您可以通过使不透明网格变得非常透明来强制不透明网格进行 alpha 混合,或者,您可以为其材质指定不透明纹理(即使不透明纹理没有 Alpha 通道)

    let alphamodes = [
		BABYLON.Engine.ALPHA_COMBINE,
		BABYLON.Engine.ALPHA_ADD,
		BABYLON.Engine.ALPHA_SUBTRACT,
		BABYLON.Engine.ALPHA_MULTIPLY,
		BABYLON.Engine.ALPHA_MAXIMIZED
	];

    let box1=new BABYLON.Mesh.CreateBox('box',5,scene)
    let box2=new BABYLON.Mesh.CreateBox('box',5,scene)
    let box3=new BABYLON.Mesh.CreateBox('box',5,scene)
    box2.position.x=10
    box3.position.x=20
    
    let testMat=new BABYLON.StandardMaterial('mat',scene)
    testMat.diffuseTexture=new BABYLON.Texture('../img/10.png',scene)
    //或者material.opacityTexture = material.diffuseTexture;
    testMat.alpha=0.9999
    testMat.ambientColor=new BABYLON.Color3.Red()
    testMat.backFaceCulling=false
    testMat.alphaMode=alphamodes[3]

    box1.material=testMat
    box2.material=testMat
    box3.material=testMat

 

 


网站公告

今日签到

点亮在社区的每一天
去签到