【问题标题】:How to essentially "Chroma Key" in WebGL?如何在 WebGL 中实现“色度键”?
【发布时间】:2015-06-03 00:53:43
【问题描述】:

我试图弄清楚如何根据颜色设置我绘制的纹理正方形的 alpha。我正在使用白色背景的红色阿拉巴马州 A 的图片。我希望能够切换它以取出红色并通过 A 显示并切换它以取出白色并离开 A。我有 2 个带纹理的正方形。一个是背景,所以我认为我不能在碎片着色器中执行此操作,因为它会对两个图像都执行此操作,对吗?在我的主 js 文件中,当我单击切换 HTML 按钮时,我需要能够将“色度键”从红色切换为白色。

那么,如果只有 4 个带颜色的真点,我如何根据像素更改带纹理的正方形的 alpha?或 6 个点,其中 2 个被使用两次(2 个三角形)。

顺便说一句,这只是二维的。

【问题讨论】:

    标签: javascript webgl alpha blending chromakey


    【解决方案1】:

    简洁的版本是使用红色或其他东西作为您的 alpha

    使用 alpha 的红色

    gl_FragColor = color.rgbr;
    

    对 alpha 使用非红色(例如绿色)的东西

    gl_FragColor = color.rgbg;
    

    现在你需要一些方法来选择

    uniform bool useRed;
    
    ...
    
    gl_FragColor = vec4(color.rgb, useRed ? color.r : color.g);
    

    或者也许一种更有创意的方式是混合红色和绿色。

    uniform float mixAmount; // 0 = red, 1 = green
    ...
    gl_FragColor = mix(color.rgbr, color.rgbg, mixAmount);
    

    【讨论】:

    • 为了记录,前两个示例中所做的称为swizzling
    • 谢谢大佬,今天就试试看,看看我能想出什么。 :) 完全有道理。但是,如果我想在红色和白色之间交替怎么办?而不是红色和绿色。 color.r 用于 alpha,但如果不是 useRed,我希望它键出白色,但不是红色。这有意义吗?
    • 另外,有没有什么办法可以让我为我的纹理 1(前景)抠出但不抠出我的纹理 2(背景)?
    • 红色 = r1,g0,b0,白色 = r1,g1,b。这意味着选择绿色作为 alpha = 选择红色。您也可以选择蓝色并获得相同的结果。至于做一个或另一个使用不同的着色器首先绘制背景,然后使用混合和你特殊的“选择阿尔法”着色器来绘制前景。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多