diff --git a/ReflexToQ3/includes/EntityConverter.cpp b/ReflexToQ3/includes/EntityConverter.cpp index 1defa51..66d9732 100644 --- a/ReflexToQ3/includes/EntityConverter.cpp +++ b/ReflexToQ3/includes/EntityConverter.cpp @@ -639,7 +639,8 @@ EntityConverter::convertPointLight(const std::vector &lines) const float green; float blue; // Convert 32bit hex value into RGB values - hexToRGB(color, red, green, blue); + float backgroundColor = 0.5; //!! Just a guess + hexToRGB(color, backgroundColor, red, green, blue); colorStream << "\"_color\" \"" << red << " " << green << " " << blue << "\"" << std::endl; convertedLines.push_back (colorStream.str() ); } @@ -740,17 +741,24 @@ EntityConverter::offset(const std::string &value, const float amount) const void -EntityConverter::hexToRGB(const std::string &hex, float &r, float &g, float &b) const +EntityConverter::hexToRGB(const std::string &hex, float background, float &r, float &g, float &b) const { unsigned int value; std::stringstream ss; ss << std::hex << hex; ss >> value; - // get the necessary components from the top 3 bytes - r = ((value >> 16) & 0xFF) / 255.0; - g = ((value >> 8) & 0xFF) / 255.0; - b = ((value) & 0xFF) / 255.0; + // BYTE ORDER IS ARGB + // Get each value and normalize + float sourceAlpha = ((value >> 24) & 0xFF) / 255.0; + float sourceRed = ((value >> 16) & 0xFF) / 255.0; + float sourceGreen = ((value >> 8) & 0xFF) / 255.0; + float sourceBlue = ((value) & 0xFF) / 255.0; + + // Convert RGB value close to something close to the source RGBA value + r = ((1 - sourceAlpha) * background) + (sourceAlpha * sourceRed); + g = ((1 - sourceAlpha) * background) + (sourceAlpha * sourceGreen); + b = ((1 - sourceAlpha) * background) + (sourceAlpha * sourceBlue); } diff --git a/ReflexToQ3/includes/EntityConverter.hpp b/ReflexToQ3/includes/EntityConverter.hpp index 5f3403a..7128c38 100644 --- a/ReflexToQ3/includes/EntityConverter.hpp +++ b/ReflexToQ3/includes/EntityConverter.hpp @@ -199,13 +199,14 @@ class EntityConverter * Class: EntityConverter * Method: EntityConverter :: hexToRGB * Description: Convert 8 digit hex value into separate red, green, and blue values - * Parameter: string hex, inputted hex value + * Parameter: string hex, inputted hex RGBA value (leftmost byte is alpha, then RGB) + * Parameter: float background, background color * Parameter: float r, RETURN BY REFERENCE: converted red value * Parameter: float g, RETURN BY REFERENCE: converted green value * Parameter: float b, RETURN BY REFERENCE: converted blue value *-------------------------------------------------------------------------------------- */ - void hexToRGB(const std::string &hex, float &r, float &g, float &b) const; + void hexToRGB(const std::string &hex, const float background, float &r, float &g, float &b) const; /* *-------------------------------------------------------------------------------------- * Class: EntityConverter