Генерация шума в клетках - CPP и GLSL - PullRequest
0 голосов
/ 15 октября 2018

У меня есть код, направленный на создание чего-то похожего на это изображение.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?
    }

}

}

Любая помощь илируководство

1 Ответ

0 голосов
/ 16 октября 2018

Причина, по которой ваш код не работает должным образом, заключается в том, что допустимый диапазон значений в GLSL равен [0,1], однако вы используете диапазон [0, 255] для своего алгоритма вороноидных ячеек.

Как указано в комментариях.

...