User:Auryn Beorn/How to get a valid LSL color

From Second Life Wiki
Jump to: navigation, search

Any color is always a combination of Red, Green and Blue values. Usually, these values go from 0 to 255. The higher the value, the more you have of that component. They're usually written it this order: R, G, B.

To mention a few examples:

   <255, 0, 0>         RED
   <255, 255, 0>       YELLOW (= RED + GREEN)
   <128, 128, 128>     GRAY 50%
   <0, 128, 0>         GREEN 50%
   <0, 0, 0>           BLACK
   <255, 255, 255>     WHITE

But scripts in SL need this written in a very specific way. We need to convert this. Scripts expect the numbers in a different range, so instead of writing, an example, the color red like this:

   <255, 0, 0>

the three numbers have to be within the range from 0 to 1, so the color red would be written as follows:

   <1.0, 0.0, 0.0>

What do we do, then, when we have a RGB code for a color we like, to "translate it" to LSL (the scripting language)?

We have to take the RGB, like here: 255, 255, 0 Put the three numbers between < and > and separate by commas, adding a decimal point:

   <255.0, 255.0, 0.0>

and then we have to divide the three numbers by 255.0, so we get:

   <255.0/255.0, 255.0/255.0, 0.0/255.0>

which gives as result:

   <1.0, 1.0, 0.0>

So, in general, once we have the values for R, G and B, we need to "translate" them to LSL, which expects the color as a vector, <R, G, B>, but values for R, G and B have to be from 0 to 1. So, if we have values from 0 to 255, to convert them into 0 to 1, we need to divide them by 255.

This is, we have <R, G, B>, being R, G and B from 0 to 255, as usual, so LSL needs that we perform the following operation:

   <R/255.0, G/255.0, B/255.0>

for the definitive values for the color.


   <R/255.0, G/255.0, B/255.0>

is basically the same as:

   <R, G, B>/255.0

being the last one, preferred if you typed like that in a script.

There are a lot of resources in the web to find the RGB components of a color. The two following links are good resources for this:

EXAMPLE: Let's suppose we have the blue tone <6, 172, 255>, as it will be written with the standard 0-255 range for RGB.

To convert this <6, 172, 255> to a valid color for LSL, we have to perform the following calculation:

   <6.0, 172.0, 255.0>/255.0

which means that the value we'll use for the color will be:

   <0.023529, 0.67451, 1.0>

(Yes, we could leave it as <6.0, 172.0, 255.0>/255.0, but it's better if we save the script to do unnecessary calculations.)

The colors mentioned above will also be written this way:

   <1.0, 0.0, 0.0>         RED
   <1.0, 1.0, 0.0>         YELLOW (= RED + GREEN)
   <0.5, 0.5, 0.5>         GRAY 50%
   <0.0, 0.5, 0.0>         GREEN 50%
   <0.0, 0.0, 0.0>         BLACK
   <1.0, 1.0, 1.0>         WHITE