Browse Source

color: add some vec4 constants for usual colour names.

undefined
Sam Hocevar 11 years ago
parent
commit
8ede168e62
5 changed files with 50 additions and 26 deletions
  1. +16
    -14
      src/debug/lines.cpp
  2. +15
    -0
      src/image/color/color.cpp
  3. +3
    -2
      src/lol/algorithm/aabb_tree.h
  4. +7
    -6
      src/lol/algorithm/portal.h
  5. +9
    -4
      src/lol/image/color.h

+ 16
- 14
src/debug/lines.cpp View File

@@ -70,16 +70,17 @@ void Debug::DrawBox(vec3 a, vec3 b, vec4 color)

void Debug::DrawViewProj(mat4 view, mat4 proj, vec4 color)
{
mat4 view_proj = proj * view;
mat4 const view_proj = proj * view;

//Pos to center
//Pos to center
vec3 p0 = (inverse(view) * vec4(vec3::zero, 1.f)).xyz;

//Near plane
vec4 p[4] = { inverse(view_proj) * vec4(-1.f, 1.f, -1.f, 1.f),
inverse(view_proj) * vec4( 1.f, 1.f, -1.f, 1.f),
inverse(view_proj) * vec4( 1.f,-1.f, -1.f, 1.f),
inverse(view_proj) * vec4(-1.f,-1.f, -1.f, 1.f) };
mat4 const inv_view_proj = inverse(view_proj);
vec4 p[4] = { inv_view_proj * vec4(-1.f, 1.f, -1.f, 1.f),
inv_view_proj * vec4( 1.f, 1.f, -1.f, 1.f),
inv_view_proj * vec4( 1.f,-1.f, -1.f, 1.f),
inv_view_proj * vec4(-1.f,-1.f, -1.f, 1.f) };
for (int i = 0; i < 4; i++)
p[i] = p[i] / p[i].w;

@@ -93,14 +94,15 @@ void Debug::DrawViewProj(mat4 view, mat4 proj, vec4 color)
void Debug::DrawViewProj(mat4 view_proj, vec4 color)
{
//Near plane
vec4 p[8] = { inverse(view_proj) * vec4(-1.f, 1.f, 1.f, 1.f),
inverse(view_proj) * vec4( 1.f, 1.f, 1.f, 1.f),
inverse(view_proj) * vec4( 1.f,-1.f, 1.f, 1.f),
inverse(view_proj) * vec4(-1.f,-1.f, 1.f, 1.f),
inverse(view_proj) * vec4(-1.f, 1.f,-1.f, 1.f),
inverse(view_proj) * vec4( 1.f, 1.f,-1.f, 1.f),
inverse(view_proj) * vec4( 1.f,-1.f,-1.f, 1.f),
inverse(view_proj) * vec4(-1.f,-1.f,-1.f, 1.f)
mat4 const inv_view_proj = inverse(view_proj);
vec4 p[8] = { inv_view_proj * vec4(-1.f, 1.f, 1.f, 1.f),
inv_view_proj * vec4( 1.f, 1.f, 1.f, 1.f),
inv_view_proj * vec4( 1.f,-1.f, 1.f, 1.f),
inv_view_proj * vec4(-1.f,-1.f, 1.f, 1.f),
inv_view_proj * vec4(-1.f, 1.f,-1.f, 1.f),
inv_view_proj * vec4( 1.f, 1.f,-1.f, 1.f),
inv_view_proj * vec4( 1.f,-1.f,-1.f, 1.f),
inv_view_proj * vec4(-1.f,-1.f,-1.f, 1.f)
};
for (int i = 0; i < 8; i++)
p[i] = p[i] / p[i].w;


+ 15
- 0
src/image/color/color.cpp View File

@@ -17,6 +17,21 @@
namespace lol
{

/*
* Hardcoded constants for colours
*/
vec4 const Color::black = vec4(0, 0, 0, 1);
vec4 const Color::red = vec4(1, 0, 0, 1);
vec4 const Color::green = vec4(0, 1, 0, 1);
vec4 const Color::yellow = vec4(1, 1, 0, 1);
vec4 const Color::blue = vec4(0, 0, 1, 1);
vec4 const Color::magenta = vec4(1, 0, 1, 1);
vec4 const Color::cyan = vec4(0, 1, 1, 1);
vec4 const Color::white = vec4(1, 1, 1, 1);

/*
* Conversion from colours to hexadecimal
*/
String Color::HexString4Bpp(vec3 c)
{
uvec3 c2 = (uvec3)(clamp(c, 0.f, 1.f) * 255.999f);


+ 3
- 2
src/lol/algorithm/aabb_tree.h View File

@@ -14,6 +14,7 @@

#include <lol/base/array.h>
#include <lol/debug/lines.h>
#include <lol/image/color.h>

namespace lol
{
@@ -32,7 +33,7 @@ void DrawInner(TREE *tree, Array<TBB, vec4> &boxes,
Array<TE *, int, vec4> &elements,
Array<int, TBB> &leaves, int children, vec4 color)
{
boxes.Push(tree->GetAABB(), vec4(1.f));
boxes.Push(tree->GetAABB(), Color::white);
leaves.Push(0, boxes.Last().m1);
while (leaves.Count() > 0)
{
@@ -49,7 +50,7 @@ void DrawInner(TREE *tree, Array<TBB, vec4> &boxes,
}
}
if (!done)
elements.Push(tree->GetElements()[tree->GetTree()[leaves[0].m1].m_elements[j]].m_element, 1, vec4(1, 0, 0, 1));
elements.Push(tree->GetElements()[tree->GetTree()[leaves[0].m1].m_elements[j]].m_element, 1, Color::red);
}

for (int i = 0; i < children; i++)


+ 7
- 6
src/lol/algorithm/portal.h View File

@@ -16,6 +16,7 @@

#include <lol/base/array.h>
#include <lol/debug/lines.h>
#include <lol/image/color.h>

namespace lol
{
@@ -34,8 +35,8 @@ void Draw(PortalDoor<TE>& port, vec4 color)

// Draw normal
vec3 p = port.m_center + port.m_up * port.m_size.y * .5f;
Debug::DrawLine(p, p + port.m_normal, vec4(1, 0, 0, 1));
Debug::DrawLine(p, p + port.m_up, vec4(0, 1, 0, 1));
Debug::DrawLine(p, p + port.m_normal, Color::red);
Debug::DrawLine(p, p + port.m_up, Color::green);
// Draw door
for (int l = 0; l < 4; l++)
Debug::DrawLine(points[l], points[(l + 1) % 4], color);
@@ -308,17 +309,17 @@ public:
for (int i = 0; i < visible_rooms[j]->m_doors.Count(); i++)
{
PortalDoor<TE>* port = visible_rooms[j]->m_doors[i];
Debug::Draw(*port, vec4(0, 1, 1, 1));
Debug::Draw(*port, Color::cyan);
tmp += vec4(port->m_center, 1.f);
}
tmp /= tmp.w;
Debug::DrawBox(tmp.xyz - vec3(1.f), tmp.xyz + vec3(1.f), vec4(1, 1, 0, 1));
Debug::DrawBox(tmp.xyz - vec3(1.f), tmp.xyz + vec3(1.f), Color::yellow);
}
for (int i = 0; i < ignore_doors.Count(); i++)
{
PortalDoor<TE>* port = ignore_doors[i];
Debug::Draw(*port, vec4(1, 0, 1, 1));
Debug::DrawViewProj(port->m_view, port->m_proj, vec4(1, 0, 1, 1));
Debug::Draw(*port, Color::magenta);
Debug::DrawViewProj(port->m_view, port->m_proj, Color::magenta);
}
#endif //LOL_BUILD_DEBUG
}


+ 9
- 4
src/lol/image/color.h View File

@@ -230,14 +230,14 @@ public:
* Note: XYZ values are normalised using a D65 illuminant if
* no white value is provided.
*/
static vec3 CIEXYZToCIELab(vec3 src, vec3 white)
static vec3 CIEXYZToCIELab(vec3 src, vec3 white_value)
{
float const a = (6.0 * 6.0 * 6.0) / (29 * 29 * 29);
float const b = (29.0 * 29.0) / (3 * 6 * 6);
float const c = 4.0 / 29;
float const d = 1.0 / 3;

src /= white;
src /= white_value;

vec3 f = b * src + vec3(c);
if (src.x > a)
@@ -257,9 +257,9 @@ public:
return CIEXYZToCIELab(src, vec3(95.047f, 100.f, 108.883f));
}

static vec4 CIEXYZToCIELab(vec4 src, vec4 white)
static vec4 CIEXYZToCIELab(vec4 src, vec4 white_value)
{
return vec4(CIEXYZToCIELab(src.rgb, white.rgb), src.a);
return vec4(CIEXYZToCIELab(src.rgb, white_value.rgb), src.a);
}

static vec4 CIEXYZToCIELab(vec4 src)
@@ -285,6 +285,11 @@ public:
static String HexString4Bpp(vec4 c);
static String HexString8Bpp(vec3 c);
static String HexString8Bpp(vec4 c);

/*
* Some predefined colours
*/
static const vec4 black, red, green, yellow, blue, magenta, cyan, white;
};

} /* namespace lol */


Loading…
Cancel
Save