FloatPixMapRef FPMCopy(FloatPixMapRef pm)
{
	if (pm != NULL)
	{
		size_t byteCount = GetPixelCount(pm) * sizeof (FPMColor);
		if (byteCount == 0)
		{
			// One empty pixmap of a given size is the same as another, so we'll stick with the one instead of making another.
			assert(pm->pixels == NULL);
			return FPMRetain(pm);
		}
		
		assert(pm->pixels != NULL);
		
		void *pixels = malloc(byteCount);
		if (pixels == NULL)  return NULL;
		
		if (pm->rowCount == pm->width)
		{
			// No padding to skip.
			memcpy(pixels, pm->pixels, byteCount);
		}
		else
		{
			// Original is padded, copy row by row.
			FPMColor *srcPx = pm->pixels;
			FPMColor *dstPx = pixels;
			size_t count = pm->height;
			
			do
			{
				memcpy(dstPx, srcPx, sizeof (FPMColor) * pm->width);
				srcPx += pm->rowCount;
				dstPx += pm->width;
			} while (--count);
		}
		
		return MakeFPM(FPMMakeSize(pm->width, pm->height), pm->width, pixels, NULL);
	}
	else
	{
		return NULL;
	}
}
void ModelCreator::Create3DModel()
{
    GetPixelCount();
    CreatePixelData();
    CreateBinaryData();
}