#include <iostream>
#include <cmath>

struct VolumeObject
{
	float Red, Green, Blue, Alpha, Volume;

	VolumeObject(float red, float green, float blue, float alpha, float volume) : Red(red), Green(green), Blue(blue), Alpha(alpha), Volume(volume)
	{
	}
};

int main()
{
	VolumeObject volumes[] = { VolumeObject(1, 0, 0, 0.5f, 0.25f), VolumeObject(1, 0, 0, 0.5f, 0.5f), VolumeObject(1, 0, 0, 0.5f, 0.25f) };

	float colorR = 0;
	float colorG = 0;
	float colorB = 0;
	float colorA = 1;

	for (int i = 0; i < 3; ++i)
	{
		float scale = colorA - colorA * exp(-volumes[i].Alpha * volumes[i].Volume);
		std::cout << "Scale: " << scale << std::endl;
		colorR += volumes[i].Red * scale;
		colorG += volumes[i].Green * scale;
		colorB += volumes[i].Blue * scale;
		colorA *= exp(-volumes[i].Alpha * volumes[i].Volume);
		std::cout << colorR << " " << colorG << " " << colorB << " " << colorA << std::endl;
	}
	colorR /= colorA;
	colorG /= colorA;
	colorB /= colorA;
	colorA /= colorA;
	std::cout << "Final Color" << std::endl;
	std::cout << colorR << " " << colorG << " " << colorB << " " << colorA << std::endl;
	return 0;
}