rtsf_LoadTexture.h 1.56 KB
#include "cimg/cimg.h"
#include "rtsFunction3D.h"
#include "rtspoint3D.h"

using namespace cimg_library;

typedef point3D<unsigned char> RGB;

rtsFunction3D<RGB> rtsf_LoadTexture(const char* filename)
{

	CImg<unsigned char> image(filename);

	unsigned int max_x = image.dimx();
	unsigned int max_y = image.dimy();
	unsigned int max_z = image.dimz();

	rtsFunction3D<RGB> bits(max_x, max_y, max_z);

	unsigned int x, y, z;
	for(x = 0; x<max_x; x++)
		for(y = 0; y<max_y; y++)
			for(z = 0; z<max_z; z++)
			{
				bits.xyz(x, max_y - y, z).x = image(x, y, z, 0);
				bits.xyz(x, max_y - y, z).y = image(x, y, z, 1);
				bits.xyz(x, max_y - y, z).z = image(x, y, z, 2);
			}
	

	return bits;

}

rtsFunction3D<unsigned char> rtsf_LoadGrayTexture(const char* filename)
{

	CImg<unsigned char> image(filename);

	//CImgDisplay main_disp(image);
	//while(true);

	unsigned int dim_x = image.dimx();
	unsigned int dim_y = image.dimy();
	unsigned int dim_z = image.dimz();

	rtsFunction3D<unsigned char> bits(dim_x, dim_y, dim_z);
	

	float r, g, b;
	float greyscale;
	float max_length = sqrt(3.0f);

	unsigned int x, y, z;
	for(x = 0; x<dim_x; x++)
		for(y = 0; y<dim_y; y++)
			for(z = 0; z<dim_z; z++)
			{
				if(image.dimv() == 3)
				{
					r = image(x, y, z, 0)/255.0f;
					g = image(x, y, z, 1)/255.0f;
					b = image(x, y, z, 2)/255.0f;
					greyscale = 0.3*r + 0.59*g + 0.11*b;
				}
				else
					greyscale = image(x, y, z, 0)/255.0f;



				bits.xyz(x, dim_y - y - 1, z) = greyscale * 255;
			}
	

	return bits;

}