sorting - 在 glsl 中构建一种像素排序

标签 sorting opengl video glsl max-msp-jitter

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

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

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

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

enter image description here

        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;
            }
        }

最佳答案

我实际上制作了您上面发布的原始图像。在 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

祝你好运!

关于sorting - 在 glsl 中构建一种像素排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35095600/

相关文章:

java - OpenGL - 颜色布局位置不起作用

ios - Objective-c,对于从 URL 播放视频,AVPlayer 或 MPMovieplayer 哪个更好?

jquery - 如何根据 ID 对 LI 进行排序

swift - 将 OpenGL 着色器转换为 Metal (Swift) 以便在 CIFilter 中使用

ruby - 我需要在 Ubuntu 上安装什么包才能让 ruby​​-opengl 编译?

java - Android VideoView 无法在 T-Mobile G2 上播放示例视频(仅播放音频)

android - 如何限制用户只能从 Android 的 MediaStore 中挑选照片?

MySQL:在不划分集合的情况下对有序行的集合进行排序

java - 使用选择排序算法对字符串进行排序

algorithm - 修改 reddit 的排名算法以更频繁地更改内容?