示例#1
0
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;
}