小编NeH*_*rma的帖子

如何在GLSL中编写"纹理呼吸"着色器?

我正在制作一个小的2D视频游戏,在互联网上搜索与其无关的内容时,我发现了这个视频:http://vimeo.com/67886447 我非常喜欢它.我要它.

作者概述了这个过程:

通过计算源照片的矢量导数然后沿结果轴应用迭代平流来产生该效果.次级标量场控制平流的强度和幅度,并允许一系列有趣的效果,包括脉冲,挥动和呼吸.

据我所知:计算梯度场,然后像素在相应矢量的方向和幅度上移动.我猜测时间是矢量幅度的乘数.

所以,我想,我理解我脑海中的过程,但由于我是GLSL的新手,而且一般是着色器,我不知道如何编写代码.

这就是我到目前为止看到的代码大纲:

迭代图像,用使用某种边缘检测算法产生的向量填充矩阵.再次迭代图像并按矢量幅度*时间移动所有像素.

几个具体问题:

这会是否有效,性能明智(当然是普通PC)?

是否可以使用简单的边缘检测算法(检查附近的8个像素,比较它们之间的差异,并将其保持为幅度,矢量的方向将由具有最大差异的2个像素之间的角度决定).

我如何取代像素?我想移动一个像素会在它所在的位置留下一个空白区域,或者,如果我克隆像素,会有很多奇怪的重叠,图像会变坏.

EDITS:

我刚刚意识到在一次通过中做得更好:计算向量,然后立即移动像素.你怎么看?

我猜,我使用错了,并将其视为迭代.

这是我到目前为止的代码.它很简单,它只沿+ x轴.

uniform float time;
uniform vec2 mouse;
uniform vec2 resolution;
varying vec2 vTexCoord;
uniform sampler2D u_texture; //diffuse map

void main( void ) {



vec2 pos = vec2(1,0);
vec4 px1 = texture2D(u_texture, vTexCoord+(pos/resolution));
vec4 dif =  px1 - texture2D(u_texture, vTexCoord);


vec4 color = texture2D(u_texture, vTexCoord+(vec2((dif.r+dif.g+dif.b)*time,0)/resolution));


    gl_FragColor = vec4(color.xyz,1.0);

//gl_FlagColor = color;
}
Run Code Online (Sandbox Code Playgroud)

现在我只需要为其余的轴做这件事.效果实际上看起来像是应该做的.

我为Y轴做了这个,这就是我得到的,我如何修复工件,所以看起来颜色实际上是扩展的,而不仅仅是移动.

呼吸的东西http://rghost.ru/57475312/image.png

(着色器仅应用于背景图像)

opengl shader glsl

3
推荐指数
1
解决办法
1042
查看次数

'For loop'由于某种原因没有完成

我有一个数组,我试图使用内核模糊,但循环由于某种原因没有完成,这里是代码:

for (int x = 0; x < 128; x++) {
            for (int y = 0; y < 128; y++) {
                for (int kx = -2; x <= 6; x++) {
                    for (int ky = -2; y <= 6; y++) {

                        nlm2[x][y] += 100 * (int) ((float) nlm[x][y]*(float)kernel[(kx+3)*(ky+3)-1]);
                        System.out.println(x+" "+y);

                        System.out.println(kx+" NLM: "+(float) nlm[x][y]);
                        System.out.println(ky+" Kernel: "+(float)kernel[(kx+3)*(ky+3)-1]);

                    }
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

它似乎在x = 0后停止; y = 6 kx = ky = -2

控制台中没有错误,并且在这个小循环 - 循环之后显示另一个打印屏幕.

java for-loop

0
推荐指数
1
解决办法
99
查看次数

jQuery查找功能不起作用

我正在尝试使用javascript做一个pop-ip类型的东西,由于某种原因它不起作用.它也没有显示任何错误.

<div style="cursor:pointer;" onclick="displayTickets('2013-12-27')" 
 onmouseover="displayMenu(this)" 
 onmouseout="hideMenu(this)" 
 bgcolor="#CCCCCC" width="14%" height="64" align="left" valign="top">
    27 Pre New Years Hotel Takeover
    <div class=".cPopUp" id="cPopUp5" style="position:absolute;z-index:1000;width:384px;height:192px;background-color:rgba(0,100,0,.8);left:0;top:0;right:0;padding:8px;text-allign:left;">
        <h4>Pre New Years Hotel Takeover</h4>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

.cPopUp显然是我想要的弹出窗口.show()/.hide()

这是javascript:

function displayMenu(el)
{
$(el).find(".cPopUp").show(500);

}

function hideMenu(el)
{
    $(el).find(".cPopUp").hide(500);
}
Run Code Online (Sandbox Code Playgroud)

如果我做

 $(el).hide(500);
Run Code Online (Sandbox Code Playgroud)

它隐藏了整个事情,所以我知道它运作良好,但我想它没有找到任何东西?

html javascript jquery

0
推荐指数
1
解决办法
65
查看次数

标签 统计

for-loop ×1

glsl ×1

html ×1

java ×1

javascript ×1

jquery ×1

opengl ×1

shader ×1