PDA

View Full Version : How to Convert from RGB 255 to OpenGL Float Color



gp343
12-01-2003, 03:13 AM
Hi there,
I'm a newbie to Opengl and was wondering if i had a color value say 233, how do i convert that color value to opengl float color value? glColor3f(1.0, 0.0, 0.0) is how a color is set in opengl, but how do i covert say 233 to the 1.0 ro 0.0 equivalent?

James

john
12-01-2003, 03:17 AM
Hello,

think of it this way: you know that you want 0 (out of 255) to map to 0 (out of 1), and you want to map 255 (out of 255) to 1 (out of 1). Its reasonable to assume that this is a linear mapping, right? 'course it is. So, what is the equation of a line?

y=mx+c

where you need to find m (the gradient) and c (the y-intercept). two unknowns, but with two equations, ie.

1=255m+c .. [2] and
0=0m+c .. [1]

from [1] we can see that c is 0. substitution c into equation [1], we see that m is 1/255.0. so, to answer your question, you need the formula

b/255.0 = f

where b is your byte value and f is the corresponding f value

cheers,
John

Tzupy
12-01-2003, 03:17 AM
Hi,
You can use glColor3ub instead. Or simply compute the float color as (float)ubyte_color / 255.0f.

zeckensack
12-01-2003, 04:28 AM
Originally posted by Tzupy:
Hi,
You can use glColor3ub instead. Or simply compute the float color as (float)ubyte_color / 255.0f.Nitpick:

float out=(1.0f/255)*byte_in;This maximizes your chances that the compiler will pick the FIMUL instruction.
(1.0f/255 should be killed by constant folding, so that's cheap).

mdog1234
12-01-2003, 09:50 AM
all it is is your color in ubytes lets say 233 divided by 255 which = 0.91372549019607843137254901960784

john
12-01-2003, 01:44 PM
well, 1/255.0 is an implementation detail, not an algorithmic detail (which was the point of my post...)

but its good to point these things out, yer