Initial
This commit is contained in:
commit
62d2de747e
1 changed files with 130940 additions and 0 deletions
56
Code blocks projekt/modules/color.c
Normal file
56
Code blocks projekt/modules/color.c
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
#include "color.h"
|
||||
|
||||
#define baseHue 30 /**< A kockák átlagos színezetsége. */
|
||||
#define hueVariance 20 /**< A kockák színezetségének átlagostól vlaó eltérése. */
|
||||
#define baseSaturation 0.75 /**< A kockák átlagos telítettsége. */
|
||||
#define baseLightness 0.6 /**< A kockák átlagos fényessége. */
|
||||
#define lightnessStep 0.08 /**< A kockák oldalainak háromféle fényesség értéke van, ezzel szimuláljuk a fény-árnyékot. */
|
||||
|
||||
|
||||
///Ez a függvény majdnem teljes egészében erről az oldalról származik: https://www.programmingalgorithms.com/algorithm/hsl-to-rgb?lang=C
|
||||
static float hueToRgb(float v1, float v2, float vH) {
|
||||
if (vH < 0) vH += 1;
|
||||
if (vH > 1) vH -= 1;
|
||||
if ((6 * vH) < 1) return (v1 + (v2 - v1) * 6 * vH);
|
||||
if ((2 * vH) < 1) return v2;
|
||||
if ((3 * vH) < 2) return (v1 + (v2 - v1) * ((2.0f / 3) - vH) * 6);
|
||||
return v1;
|
||||
}
|
||||
|
||||
///Ez a függvény majdnem teljes egészében erről az oldalról származik: https://www.programmingalgorithms.com/algorithm/hsl-to-rgb?lang=C
|
||||
static color hslToRgb(int h, float s, float l) {
|
||||
color rgb;
|
||||
if (s == 0) rgb.r = rgb.g = rgb.b = (unsigned char)(l * 255);
|
||||
else {
|
||||
float v1, v2;
|
||||
float hue = (float)h / 360;
|
||||
|
||||
v2 = (l < 0.5) ? (l * (1 + s)) : ((l + s) - (l * s));
|
||||
v1 = 2 * l - v2;
|
||||
|
||||
rgb.r = (unsigned char)(255 * hueToRgb(v1, v2, hue + (1.0 / 3)));
|
||||
rgb.g = (unsigned char)(255 * hueToRgb(v1, v2, hue));
|
||||
rgb.b = (unsigned char)(255 * hueToRgb(v1, v2, hue - (1.0 / 3)));
|
||||
rgb.a = 255;
|
||||
}
|
||||
return rgb;
|
||||
}
|
||||
|
||||
/** \brief Véletlenszerűre színez egy kockát.
|
||||
* \return színek
|
||||
* Az alapszín, és hueVariance alapján meghatároz
|
||||
* véletlenszerűen egy színezetséget, és az ahhoz a színezetséghez tartozó világosabb és sötétebb
|
||||
* árnyalatú színeket is, majd ezeket RGBA-ba kódolja.
|
||||
* Egy random hue-val készített paletta sokkal jobban néz ki, mint egy random RGB-vel készített.
|
||||
*/
|
||||
colors createBlockColor() {
|
||||
int hue = randomIntWithinBorders(baseHue, hueVariance);
|
||||
|
||||
if(hue < 0) hue += 360;
|
||||
|
||||
return (colors) {
|
||||
hslToRgb(hue, baseSaturation, baseLightness + lightnessStep),
|
||||
hslToRgb(hue, baseSaturation, baseLightness),
|
||||
hslToRgb(hue, baseSaturation, baseLightness - lightnessStep)
|
||||
};
|
||||
}
|
||||
Loading…
Reference in a new issue