static void add_crater(int i, union vec3 p, float r, float h) { struct bump *b; const union vec3 right_at_ya = { { 0.0f, 0.0f, 1.0f } }; const union vec3 up = { { 0.0f, 1.0f, 0.0f } }; float crater_r; b = &craterlist[i]; b->is_crater = 1; b->p = p; b->r = r; b->h = h; b->tx = 512; b->ty = 512; b->ts = 512; b->sampledata = malloc(3 * 1024 * 1024); memset(b->sampledata, crater_base_level, 3 * 1024 * 1024); b->samplew = 1024; b->sampleh = 1024; b->sample_bytes_per_row = 3 * b->samplew; crater_r = (0.5 * (snis_random_float() + 1.0) * 5.5) * (0.5 * (snis_random_float() + 1.0) * 5.5) + 2.5; create_crater_heightmap((unsigned char *) b->sampledata, 1024, 1024, 512, 512, (int) crater_r, 3); quat_from_u2v(&b->texelq, &p, &right_at_ya, &up); }
int main(int argc, char *argv[]) { unsigned char *image; float crater_r; const char *filename = "test_crater_output.png"; image = malloc(3 * 1024 * 1024); memset(image, 127, 3 * 1024 * 1024); crater_r = 75.0; create_crater_heightmap((unsigned char *) image, 1024, 1024, 512, 512, (int) crater_r, 3); if (png_utils_write_png_image(filename, image, 1024, 1024, 0, 0)) { fprintf(stderr, "Failed to write png image %s: %s\n", filename, strerror(errno)); exit(1); } printf("Wrote png image to %s\n", filename); return 0; }