예제 #1
0
static void sample_data(texgz_tex_t* src,
                        texgz_tex_t* dst,
                        int x, int y,
                        int i, int j,
                        int m, int n,
                        double latT, double lonL,
                        double latB, double lonR)
{
	assert(src);
	assert(dst);
	LOGD("debug x=%i, y=%i, i=%i, j=%i, m=%i, n=%i, latT=%lf, lonL=%lf, latB=%lf, lonR=%lf",
	     x, y, i, j, m, n, latT, lonL, latB, lonR);

	// make a dummy tile
	nedgz_tile_t* tile = nedgz_tile_new(x, y, 9);
	if(tile == NULL)
	{
		return;
	}

	// compute sample coords
	double lat;
	double lon;
	tile_coord(tile, i, j, m, n, &lat, &lon);

	// compute u, v
	float u = (float) ((lon - lonL)/(lonR - lonL));
	float v = (float) ((lat - latT)/(latB - latT));

	// interpolate color
	unsigned char r;
	unsigned char g;
	unsigned char b;
	interpolatec(src, u, v, &r, &g, &b);

	// store color
	unsigned char* pixels = dst->pixels;
	int            stride = dst->stride;
	int            bpp    = texgz_tex_bpp(dst);
	int            idx    = m*stride*bpp + n*bpp;
	pixels[idx + 0] = r;
	pixels[idx + 1] = g;
	pixels[idx + 2] = b;

	nedgz_tile_delete(&tile);
}
예제 #2
0
static void sample_data(texgz_tex_t* src,
                        texgz_tex_t* dst,
                        int x, int y,
                        int m, int n,
                        double latT, double lonL,
                        double latB, double lonR)
{
	assert(src);
	assert(dst);

	// compute sample coords
	double lat;
	double lon;
	float s  = (float) (SUBTILE_SIZE - 1);
	float xx = (float) x;
	float yy = (float) y;
	float nn = (float) n/s;
	float mm = (float) m/s;
	terrain_tile2coord(xx + nn, yy + mm, 9, &lat, &lon);

	// compute u, v
	float u = (float) ((lon - lonL)/(lonR - lonL));
	float v = (float) ((lat - latT)/(latB - latT));

	// interpolate color
	unsigned char r;
	unsigned char g;
	unsigned char b;
	interpolatec(src, u, v, &r, &g, &b);

	// store color
	unsigned char* pixels = dst->pixels;
	int            stride = dst->stride;
	int            bpp    = texgz_tex_bpp(dst);
	int            idx    = m*stride*bpp + n*bpp;
	pixels[idx + 0] = r;
	pixels[idx + 1] = g;
	pixels[idx + 2] = b;
}