在细胞中产生噪音 - CPP 和 GLSL

Posted

技术标签:

【中文标题】在细胞中产生噪音 - CPP 和 GLSL【英文标题】:Generating Noise in Cells - CPP and GLSL 【发布时间】:2018-10-14 21:57:16 【问题描述】:

我的代码旨在创建类似于此图像的内容。 https://thebookofshaders.com/edit.php#12/cellnoise-01.frag

在我的实现中,我将图像划分为 8x8 网格,旨在实现类似的效果。调试后,我正在努力弄清楚为什么我的点在每个单元格中绘制,但它们周围的每个其他点都是白色的,并且不会随着距离而改变。请注意,网格中有 64 个唯一点(它们尚未随机化,但每个单元格有一个)。

这是我的主要方法:

uniform ivec2 u_Dimensions;
uniform int u_Time;

in vec2 fs_UV;

out vec3 color;

void main()


//divide the image into a grid

float xpos = (fs_UV.x * u_Dimensions.x);
float ypos = (fs_UV.y * u_Dimensions.y);

float width = float(u_Dimensions.x);
float height = float(u_Dimensions.y);

float cell_height = u_Dimensions.y / 8.f;
float cell_width = u_Dimensions.x / 8.f;

//arrays to contain the x and y for each placed point

float px[64];
float py[64];

int p_count = 0;

for(float i = 0; i < u_Dimensions.y; i+= cell_height)
    for(float j = 0; j < u_Dimensions.x; j+= cell_width)

        px[p_count] = int(j + cell_width / 5.f);    //x and y
        py[p_count] = int(i + cell_height / 2.f);   //placed manually for now

        p_count++;
    



int cellx = int(float(xpos / cell_width));
int celly = int(float(ypos / cell_height));
int index = (cellx) + (8 * celly);

for(int i = 0; i < 64; i++)

    if (px[i] == int(xpos) && py[i] == int(ypos))
        color = vec3(0, 0, 0);
        break;                      //all dots successfully draw in black

     else 

        float close_x = (px[index]);    //these values are registering fine
        float close_y = (py[index]);

        color = vec3(255, 255, 255) / vec3(distance(vec2(xpos, ypos), vec2(close_x, close_y)));   
        //final color always appears 100% white, no gradient?
    




有什么帮助或指导吗?

【问题讨论】:

GLSL 中的全白是(1, 1, 1),而不是(255, 255, 255) 【参考方案1】:

您的代码未按预期工作的原因是因为 GLSL 中值的有效范围是 [0,1],但是您的 voronoi 单元算法使用的范围是 [0, 255]。

正如 cmets 中指出的那样。

【讨论】:

以上是关于在细胞中产生噪音 - CPP 和 GLSL的主要内容,如果未能解决你的问题,请参考以下文章

stringWithFormat 和 initWithFormat 在 ARC 中产生不同的值

$\lambda = 0$ 和 OLS 的 LASSO 在 R glmnet 中产生不同的结果

AES 加密在 iOS 和 Android 中产生不同的结果

为啥字节和短除法会在 Java 中产生 int?

画布签名触摸在 phonegap 中产生问题

在 HTML 中产生 LIGHT COLOR 的理论机制是啥?