我有旨在创建类似于此图像的代码。 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?
}
}
}
有帮助或指导吗?
答案 0 :(得分:0)
您的代码无法按预期运行的原因是因为GLSL中值的有效范围是[0,1],但是您对voronoi细胞算法使用了[0,255]范围。 / p>
如评论中所指出。