rt/src/color_maths.c

69 lines
2.0 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* color_maths.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: ntrahy <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/11/23 04:53:43 by ntrahy #+# #+# */
/* Updated: 2017/01/08 12:55:30 by scebula ### ########.fr */
/* */
/* ************************************************************************** */
#include "rt.h"
#include <math.h>
void color_scale(t_color *color, double scalar)
{
color->r = (int)((double)color->r * scalar);
if (color->r > 255)
color->r = 255;
color->g = (int)((double)color->g * scalar);
if (color->g > 255)
color->g = 255;
color->b = (int)((double)color->b * scalar);
if (color->b > 255)
color->b = 255;
}
void color_add(t_color *c1, t_color c2)
{
c1->r += c2.r;
if (c1->r > 255)
c1->r = 255;
c1->g += c2.g;
if (c1->g > 255)
c1->g = 255;
c1->b += c2.b;
if (c1->b > 255)
c1->b = 255;
}
void color_add_nolimit(t_color *c1, t_color c2)
{
c1->r += c2.r;
c1->g += c2.g;
c1->b += c2.b;
}
void color_divide(t_color *c, double d)
{
c->r = (int)(((double)c->r) / d);
c->g = (int)(((double)c->g) / d);
c->b = (int)(((double)c->b) / d);
}
void color_multiply(t_color *c1, t_color c2)
{
double r_intensity;
double g_intensity;
double b_intensity;
r_intensity = (double)c2.r / 0xFF;
g_intensity = (double)c2.g / 0xFF;
b_intensity = (double)c2.b / 0xFF;
c1->r = (int)((double)(c1->r) * r_intensity);
c1->g = (int)((double)(c1->g) * g_intensity);
c1->b = (int)((double)(c1->b) * b_intensity);
}