gpt4 book ai didi

graphics - 如何判断片段的颜色是否为白色?

转载 作者:行者123 更新时间:2023-12-03 06:41:24 24 4
gpt4 key购买 nike

我的场景中有许多彼此相邻的圆圈(白色圆圈和不同颜色的圆圈)。我只想模糊白色圆圈。 (在我的例子中,白色意味着 (1,1,1)。)

我的问题是:我应该如何仅使用片段着色器选择和模糊白色片段?

我想在 GLSL 中做这样的事情:

if (my_current_fragment's_color == white)
{blur current fragment;}
else
{do not blur current fragment}

(我有一个有效的模糊效果,但它不适本地模糊了整个场景,因为我无法根据片段的颜色在代码中做出决定。)

我应该怎么做?上述代码在 GLSL 语言中的精确匹配是什么?如何确定片段的颜色是否为白色?你们有什么想法吗?

<小时/>

如果您可能需要,这是我的代码:

    vertexShader: [
//"#define KERNEL_SIZE 25.0",
"uniform vec2 uImageIncrement;",
"varying vec2 vUv;",
"void main() {",
"vUv = uv - ( ( KERNEL_SIZE - 1.0 ) / 2.0 ) * uImageIncrement;",
"gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
"}"
].join("\n"),
fragmentShader: [
//"#define KERNEL_SIZE 25",
"uniform float cKernel[ KERNEL_SIZE ];",
"uniform sampler2D tDiffuse;",
"uniform vec2 uImageIncrement;",
"varying vec2 vUv;",
"void main() {",
"vec2 imageCoord = vUv;",
"vec4 sum = vec4( 0.0, 0.0, 0.0, 0.0 );",
"for( int i = 0; i < KERNEL_SIZE; i ++ ) {",


"sum += texture2D( tDiffuse, imageCoord ) * cKernel[ i ];",
//THE ABOVE LINE SHOULD BE RUN FOR WHITE FRAGMENTS ONLY. BUT HOW?


"imageCoord += uImageIncrement;",
"}",
"gl_FragColor = sum;",
"}"

最佳答案

这将非常困难,您必须找到一些妥协方案,除非您可以首先将白色圆圈渲染到不同的帧缓冲区。

假设您从这里开始。

white circle over pink triangle with blue background

如果您仅将模糊内核应用于白色像素,您将得到以下结果:

white circle with blurred interior over pink triangle with blue background

由于蓝色像素没有获得模糊内核,因此白色像素不会渗入蓝色。只有粉色和蓝色像素可以渗入白色。

所以你尝试将图像分为白色部分和非白色部分:

white circle black circle over pink triangle with blue background

然后您可以单独模糊白色部分,然后重新组合(分多个步骤或全部在同一个着色器中)。但你必须弄清楚将它与什么重新组合。如果将其与原始图像重新组合,硬边白色仍然存在。如果将其与仅包含非白色部分的图像重新组合,则会得到硬黑边缘。

white circle with halo over pink triangle with blue background white circle with halo and black edge over pink triangle with blue background

解决方案

  • 您可以首先将白色圆圈渲染为单独的纹理,对其进行模糊处理,然后将其分层在其他所有纹理之上。

  • 您可以缩放内核,使内核“向外”模糊(膨胀),因此当您在黑色背景上模糊白色圆圈时,白色像素保持白色。这将消除边缘。

  • 您可以模糊图像中靠近白色圆圈的区域,但不完全等于白色圆圈。例如,您可以使用模糊的白色圆圈作为 Alpha 蒙版来混合模糊图像和清晰图像。

  • 您可以想出一种方法让白色圆圈看起来模糊。

关于graphics - 如何判断片段的颜色是否为白色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14026686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com