Magenta sure is an interesting color.
It is a blend of red and blue (RYB method) but in the spectra of light, there is no such color, because beyond blue there is ultraviolet, and beyond red there is infra red. Magenta is therefore something like an ‘open’ color, and could actually be any of the colors we cannot percieve.
(I actually tried a colorcircle using 3 new colors instead of magenta, namely ultra, hypra and infra. The complement of each color then yielded magenta, instead of brown)
Blending of colors should not be represented by a 3 dimensional vector, placing 3 basic hues on each axis.
A color would rather be represented by a point within or on the surface of a ColorSphere.
All the hues, except white and black lie on the equator of the sphere surface, and there will be two poles, one black and one white.
The major hues will be placed simply by specifying a angle range from 0 to 360 for each of them. Assume red, orange, yellow, green, cyan, blue and magenta as basic hues.
To simplify the current [0.0 - 1.0] range in the 3 dimensional color of todays RGB hardware, we put the white pole at (1,1,1) and the black pole at origin (0,0,0), we would still have all the greyscales at the center axial line { (0,0,0) to (1,1,1) ).
The sphere could then be rotated around its center axis and produce color rotation for all current set color values.
We still use a 3 dimensional color value, but the colors are perfectly blended throughout the interior and the surface of the sphere, creating all possible mixes of color.
Now all we have to do is to put the hues in a specific order on the equator, and this could be USER DEFINED. Allowing us to create our own spectras.
If blending paint and blending light should be handled differently, just change the spectra.
I would love the gl_ext_colorsphere_spectra extension that would allow this.
i.e.
// Place a color on the equator
gl_ext_colorsphere_spectra(GL_SPECIFY, GL_RED, (GLfloat)angle);
// Set the default RGB spectra.
gl_ext_colorsphere_spectra(GL_SPECTRA,GL_RGB,0.0);
// Set the complement of a color.
gl_ext_colorsphere_spectra(GL_COMPLEMENT,GL_RED,(GLfloat)angle);
// Rotate the colorsphere for the current primitives to draw.
gl_ext_colorsphere_spectra(GL_COLOR_ROTATE,GL_EQUATOR,(GLfloat)angle);
// and so on.
Just some dreams of mine, and maybe an important part of the future.
[This message has been edited by Hull (edited 05-14-2001).]