3) FIXED

I messed up with the scale and offset transformation from world space to data space. This is how it is correctly done:

Code:
// get lowest and highest height
float lowest, highest;
hmp_minmaxz(h, &lowest, &highest);

// magnitude is height distance between lowest and highest
float magnitude = highest - lowest;

// z values have to be between 0...65535, so we have to set
// implicit scale and offset parameters

float lowerBound = 0.0f, upperBound = 65535.0f;

// scale
{
	hmp.Head().scale[0] = h->width / upperBound;
	hmp.Head().scale[1] = h->height / upperBound;
	hmp.Head().scale[2] = magnitude / upperBound;
}

// offset
{
	hmp.Head().scale_origin[0] = -h->width/2;
	hmp.Head().scale_origin[1] = -h->height/2;
	hmp.Head().scale_origin[2] = lowest;
}



My previous mi/max values were wrong, so it was so ackwardly stretched, that I didn't saw it.