// -*-C++-*- #include #define FPARAM(name, default) float name = params->getFloat(#name, default); void GENERATE(TextureParam *params, int width, int height, int depth, int components, float *data) { FPARAM(bias, 0); FPARAM(scale, 1); FPARAM(radius, 0.75); FPARAM(line_width, 2); if(width != height) return; int ind=0, i, j; float x, y; float xstep = 1.0 / width; float ystep = 1.0 / height; ind = 0; float c = width / 2.0 - 0.5; float r0 = 0.5 * radius * width; float r1 = 0.5 * radius * width + line_width; if (r1 > width / 2.0) { r0 -= r1 - width / 2.0; r1 = width / 2.0; } for (j = 0, y = 0; j < height; j++, y += ystep) { for (i = 0, x = 0; i < width; i++, x += xstep) { float r = sqrt((i-c) * (i-c) + (j-c) * (j-c)); float c = 0, a = 0; if (r < r0) c = 1, a = 1; else if (r < r1) c = 0, a = 1; if (components >= 1) data[ind++] = c * scale + bias; if (components >= 2) data[ind++] = c * scale + bias; if (components >= 3) data[ind++] = c * scale + bias; if (components >= 4) data[ind++] = a * scale + bias; } } }