1 | /*
|
---|
2 | Copyright (C) 2005-2006 Feeling Software Inc.
|
---|
3 | MIT License: http://www.opensource.org/licenses/mit-license.php
|
---|
4 | */
|
---|
5 |
|
---|
6 | /**
|
---|
7 | @file FMColor.h
|
---|
8 | The file containing the class and global functions for RBGA colors.
|
---|
9 | */
|
---|
10 |
|
---|
11 | #ifndef _FM_COLOR_H_
|
---|
12 | #define _FM_COLOR_H_
|
---|
13 |
|
---|
14 | /**
|
---|
15 | A RBGA color.
|
---|
16 | Not used within FCollada.
|
---|
17 |
|
---|
18 | @ingroup FMath
|
---|
19 | */
|
---|
20 | class FCOLLADA_EXPORT FMColor
|
---|
21 | {
|
---|
22 | public:
|
---|
23 | uint8 r; /**< The red component. */
|
---|
24 | uint8 g; /**< The green component. */
|
---|
25 | uint8 b; /**< The blue component. */
|
---|
26 | uint8 a; /**< The alpha component. */
|
---|
27 |
|
---|
28 | /**
|
---|
29 | * Creates an empty FMColor.
|
---|
30 | *
|
---|
31 | * The default values are non deterministic.
|
---|
32 | */
|
---|
33 | FMColor() {}
|
---|
34 |
|
---|
35 | /**
|
---|
36 | * Creates the FMColor with the coordinates values.
|
---|
37 | *
|
---|
38 | * The first three coordinates are taken from the FMVector3, where the
|
---|
39 | * first one is the x value, the second is that y, and the third is the z.
|
---|
40 | * The forth value is the \c float specified.
|
---|
41 | *
|
---|
42 | *
|
---|
43 | * @param _r The red value.
|
---|
44 | * @param _g The green value.
|
---|
45 | * @param _b The blue value.
|
---|
46 | * @param _a The alpha value.
|
---|
47 | */
|
---|
48 | FMColor(uint8 _r, uint8 _g, uint8 _b, uint8 _a) { r = _r; g = _g; b = _b; a = _a; }
|
---|
49 |
|
---|
50 | /**
|
---|
51 | * Creates the FMColor from a color encoded into a uint32.
|
---|
52 | *
|
---|
53 | * The most significant byte makes up the red value. The second most
|
---|
54 | * significant makes up the green value, the third the blue, and the forth
|
---|
55 | * the alpha.
|
---|
56 | *
|
---|
57 | * @param hex The uint to decode the color values from.
|
---|
58 | */
|
---|
59 | FMColor(uint32 hex) { r = uint8((hex & 0xFF000000) >> 24); g = uint8((hex & 0xFF0000) >> 16); b = uint8((hex & 0xFF00) >> 8); a = uint8(hex & 0xFF); }
|
---|
60 |
|
---|
61 | /**
|
---|
62 | * Creates the FMColor from a list of \c floats.
|
---|
63 | *
|
---|
64 | * It creates the FMColor with the values specified in the \c floats, which
|
---|
65 | * range from 0.0f to 1.0f.
|
---|
66 | *
|
---|
67 | * \a componentCount is used to determined how many values to take from the
|
---|
68 | * \c float array. If there are insufficient values, then it will give the
|
---|
69 | * remaining values default values. The default values are 0 for the colors
|
---|
70 | * and 255 for the alpha. It fills in the values in this order: red, green,
|
---|
71 | * blue, alpha.
|
---|
72 | *
|
---|
73 | * @param components The \c float array to get values from.
|
---|
74 | * @param componentCount The amount of \c float to take from the array.
|
---|
75 | */
|
---|
76 | FMColor(const float* components, uint32 componentCount);
|
---|
77 |
|
---|
78 | /**
|
---|
79 | * Get this FMColor as an array of \c floats.
|
---|
80 | *
|
---|
81 | * It fills the first \a componentCount elements (max 4) of \c components
|
---|
82 | * with the red, green, blue, alpha values of this FMColor in that order.
|
---|
83 | *
|
---|
84 | * @param components The \c float array to fill.
|
---|
85 | * @param componentCount The amount of \c float to fill into the array.
|
---|
86 | */
|
---|
87 | void ToFloats(float* components, uint32 componentCount);
|
---|
88 |
|
---|
89 | /**
|
---|
90 | * Get the average of the three color values of this FMColor.
|
---|
91 | *
|
---|
92 | * @return The averages of the three colors values of this FMColor.
|
---|
93 | */
|
---|
94 | inline uint8 ComponentAverage() { return uint8((uint32(r) + uint32(g) + uint32(b)) / 3); }
|
---|
95 |
|
---|
96 | /**
|
---|
97 | * Get this FMColor as an array of uint8s.
|
---|
98 | *
|
---|
99 | * @return The \c uint8 array.
|
---|
100 | */
|
---|
101 | operator uint8*() { return &b; }
|
---|
102 | };
|
---|
103 |
|
---|
104 | /**
|
---|
105 | * Multiplication of a scalar with the FMColor.
|
---|
106 | *
|
---|
107 | * @param s The scalar to multiply by.
|
---|
108 | * @param c The FMColor to multiply with.
|
---|
109 | * @return the FMColor representing the resulting color.
|
---|
110 | */
|
---|
111 | inline FMColor operator*(float s, const FMColor& c) { return FMColor(uint8(c.r * s), uint8(c.g * s), uint8(c.b * s), uint8(c.a * s)); }
|
---|
112 |
|
---|
113 | #endif // _FM_COLOR_H_
|
---|