使用GLSL创建伪随机vec2

时间:2013-12-29 20:13:14

标签: opengl random glsl

我想访问我的元胞自动机的Moore邻域中像素的颜色。因此,创建了一个帧缓冲区,并将当前屏幕图像作为Sampler2D传递给GLSL着色器程序(如后处理等...)。为了访问相邻像素颜色,我向纹理坐标添加或减去一个颜色。这看起来基本上是这样的:

in vec2 TexCoord;
uniform sampler2D texFrameBuffer;
void main( void )
{
   gl_FragColor = texture(texFrameBuffer, vec2(TexCoord.x+1, TexCoord.y-1));
};

Moore Neighborhood

将访问8个周围像素中的哪一个应该是随机的。是否有(不太耗时)随机函数返回{1.0,-1.0},以便vec2可以添加到TexCoord以访问随机像素?

1 个答案:

答案 0 :(得分:2)

对于这样的事情,通常的hack是在当前纹理坐标上使用哈希函数,偏移任何时间(作为一个整体传入)或每帧在CPU上生成的随机数(再次作为统一传递) )。

有关GLSL中的一些简单哈希函数,请参阅this question and answer