【问题标题】:building a type of pixel sorting in glsl在 glsl 中构建一种像素排序
【发布时间】:2016-05-07 20:12:48
【问题描述】:

我正在努力在 glsl 中模拟一种我已经看到非常广泛使用的效果(图片中的示例)。我是 glsl 的新手,但在最大 msp 和抖动方面有相当多的经验,所以这就是我试图实现它的地方(虽然语法应该足够相似,但它是 glsl 版本 2.1)。

目前,我正在接收一个纹理,然后将输出作为第二个纹理反馈回来。使用亮度阈值,我正在选择要排序的像素,但是从这里开始,我不知道如何继续。我认为我需要:

  1. 从初始的亮度选择像素中获取颜色值。
  2. 将该颜色应用于沿某个轴的后续像素。

现在我不知道如何继续。我将包含我拥有的代码,显然在亮度阈值之后什么都没有。任何建议或资源将不胜感激。

        uniform sampler2DRect tex0;
        uniform sampler2DRect tex1;

        varying vec2 texcoord0;
        varying vec2 texcoord1;

        uniform float thresh;
        const vec4 lumcoeff = vec4(0.299,0.587,0.114,0.0);

        void main()
        {
            vec4 input0 = texture2DRect(tex0, texcoord0);
            vec4 input1 = texture2DRect(tex1, texcoord1);

            float luma = dot(input0,lumcoeff);

            if(luma > thresh){
                gl_FragColor 
            }else{ 
                gl_FragColor = input0;
            }
        }

【问题讨论】:

  • 不确定您要做什么,但我敢打赌,您需要向特定方向投射光线以整合来自源纹理的颜色,直到达到阈值。与2D raycasting light effect 非常相似,只是使用恒定的光线方向(作为一些均匀)而不是光源方向(片段-鼠标位置)并更改颜色组合方程...

标签: sorting opengl video glsl max-msp-jitter


【解决方案1】:

我实际上制作了您在上面发布的原始图像。在 GPU 上进行排序可能是一项复杂的任务,因为我们无法像 CPU 那样轻易地进行比较。

我会在bitonic merge sort 上查看这篇 nvidia 论文。 I implemented it in glsl here 如果你想看看,虽然我认为 chrome 自动播放杀死了它,所以你可能需要在 FF 或 Safari 中尝试。

如果您四处搜索,shadertoy 上还有一些示例。我认为this one might be pretty close to what you're hoping for

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多