Difference between revisions of "PRIM POINT LIGHT"
Jump to navigation
Jump to search
(Update page to add definition between sRGB colour and Linear colour.) |
|||
(20 intermediate revisions by 10 users not shown) | |||
Line 1: | Line 1: | ||
<onlyinclude>{{#if: | <onlyinclude>{{#if: | ||
{{#vardefine:light_const|{{LSL Const|PRIM_POINT_LIGHT|integer|23|c=Used to {{GetSet|{{{1|}}}|get|set|/}} the prim's point light configuration}}}} | {{#vardefine:light_const|{{LSL Const|PRIM_POINT_LIGHT|integer|23|c=Used to {{GetSet|{{{1|}}}|get|set|/}} the prim's point light configuration}}}} | ||
{{#vardefine:p_radius_desc|ranges from 0.1 to 20.0}} | |||
{{#vardefine:p_radius_desc|ranges from 0.1 to | {{#vardefine:p_falloff_desc|ranges from 0.01 to 2.0}} | ||
{{#vardefine:p_falloff_desc|ranges from 0.01 to | |||
{{#vardefine:p_intensity_desc|ranges from 0.0 to 1.0}} | {{#vardefine:p_intensity_desc|ranges from 0.0 to 1.0}} | ||
}}</onlyinclude>{{#if: | }}</onlyinclude>{{#if: | ||
{{LSL_Function/boolean|boolean}} | {{LSL_Function/boolean|boolean}} | ||
{{LSL_Function/ | {{LSL_Function/linear_color|linear_color}} | ||
}}{{LSL Constant | }}{{LSL Constant | ||
|inject-2={{LSL PrimitiveParam Categorize|Prim}} | |||
|name=PRIM_POINT_LIGHT | |name=PRIM_POINT_LIGHT | ||
|type=integer | |type=integer | ||
Line 18: | Line 14: | ||
|desc=PRIM_POINT_LIGHT is used to configure the point light configuration of the prim | |desc=PRIM_POINT_LIGHT is used to configure the point light configuration of the prim | ||
|pa={{LSL Constant/List|i_front=[ {{#var:light_const}}, |i_end= ] | |pa={{LSL Constant/List|i_front=[ {{#var:light_const}}, |i_end= ] | ||
|text=When used with [[llSetPrimitiveParams]] & [[llSetLinkPrimitiveParams]] | |text=When used with [[llSetPrimitiveParams]] & [[llSetLinkPrimitiveParams]] & [[llSetLinkPrimitiveParamsFast]] | ||
|i1_type=integer|i1_name=boolean | |toc=llSetPrimitiveParams | ||
|i2_type=vector|i2_name= | |i1_type=integer|i1_subtype=boolean|i1_name=boolean | ||
|i2_type=vector|i2_name=linear_color | |||
|i3_type=float|i3_name=intensity | |i3_type=float|i3_name=intensity | ||
|i4_type=float|i4_name=radius | |i4_type=float|i4_name=radius | ||
Line 27: | Line 24: | ||
|r_front=Returns the list [ |r_end= ] | |r_front=Returns the list [ |r_end= ] | ||
|text | |text | ||
|r1_type=integer|r1_name=boolean | |toc=llGetPrimitiveParams | ||
|r2_type=vector|r2_name= | |r1_type=integer|r1_subtype=boolean|r1_name=boolean | ||
|r2_type=vector|r2_name=linear_color | |||
|r3_type=float|r3_name=intensity | |r3_type=float|r3_name=intensity | ||
|r4_type=float|r4_name=radius | |r4_type=float|r4_name=radius | ||
|r5_type=float|r5_name=falloff | |r5_type=float|r5_name=falloff | ||
}} | }} | ||
|caveats= | |||
* Viewers that do not have advanced lighting enabled can only render 6 lights at a time and projectors will be rendered as omnidirectional light sources. (OpenGL limitations allow for 8 light sources, SL appears to reserve one each for the Sun and Moon.) | |||
** Viewers that '''do''' have advanced lighting enabled can render as many lights as their graphics card allows; it is not hard-limited by the viewer. | |||
* Lights with a high intensity have a wash-out effect when overlapping. Keep this in mind when using multiple lights. '''''Never''' create an abundance of lights to get around the 6 light maximum in basic lighting'', as viewers with advanced lighting will be washed out and may suffer from client lag. | |||
* Unlike most color in LSL, which expects a gamma-encoded value (sRGB), this expects a non-gamma-encoded value (linear RGB). This means that the value you set as the light color is not the same value you'd pass to make the source (e.g. filament ) glow the same color. You may wish to implement an [[llsRGB2Linear|sRGB Electro-Optical Transfer Function (EOTF)]] to bypass this. | |||
|examples= | |examples= | ||
Set the prim's color and the color of the light it emits to the same color:- | |||
<syntaxhighlight lang="lsl2"> | |||
integer switch; | |||
vector gLampCol = <255,190,121>; //Light colour in regular (0-255) sRGB space. This will be converted to LSL later. | |||
default | default | ||
Line 45: | Line 47: | ||
state_entry() | state_entry() | ||
{ | { | ||
gLampCol /= 255; //Convert to LSL colour. | |||
} | } | ||
touch_start(integer total_number) | touch_start(integer total_number) | ||
{ | { | ||
switch = !switch; //toggle the switch | |||
llSetLinkPrimitiveParamsFast(LINK_THIS,[ | |||
PRIM_POINT_LIGHT,switch,llsRGB2Linear(gLampCol),1,20,0, //Convert colour to linear RGB as PRIM_POINT_LIGHT requires, using llsRGB2Linear | |||
PRIM_COLOR,ALL_SIDES,gLampCol,1, | |||
PRIM_GLOW,ALL_SIDES,switch, | |||
PRIM_FULLBRIGHT,ALL_SIDES,switch]); | |||
} | |||
} | |||
</syntaxhighlight> | |||
Basic light script:- | |||
<syntaxhighlight lang="lsl2"> | |||
llSetPrimitiveParams([PRIM_FULLBRIGHT,ALL_SIDES,FALSE | integer isLightTurnedOn; | ||
default | |||
{ | |||
} | touch_start(integer total_number) | ||
{ | |||
// toggle isLightTurnedOn between TRUE and FALSE | |||
isLightTurnedOn = !isLightTurnedOn; | |||
if (isLightTurnedOn) | |||
{ | |||
llSetPrimitiveParams([ | |||
PRIM_FULLBRIGHT, ALL_SIDES, FALSE, | |||
PRIM_POINT_LIGHT, FALSE, ZERO_VECTOR, 1.0, 10.0, 0.6]); | |||
} | |||
else | else | ||
{ | { | ||
vector COLOR_ORANGE = <1.000, 0.522, 0.106>; | |||
llSetPrimitiveParams([ | |||
PRIM_FULLBRIGHT, ALL_SIDES, TRUE, | |||
PRIM_POINT_LIGHT, TRUE, COLOR_ORANGE, 1.0, 10.0, 0.6]); | |||
} | } | ||
} | } | ||
} | } | ||
</ | </syntaxhighlight> | ||
{{ | A compact version of the above:- | ||
<syntaxhighlight lang="lsl2"> | |||
integer switch; | |||
default | |||
{ | |||
touch_start(integer total_number) | |||
{ | |||
llSetPrimitiveParams( | |||
[ PRIM_FULLBRIGHT, ALL_SIDES, switch = !switch, | |||
PRIM_POINT_LIGHT, switch, <1, 0.5, 0.1> * switch, 1, 10, 0.6 ] ); | |||
} | |||
} | |||
</syntaxhighlight> | |||
|constants | |||
|functions= | |functions= | ||
{{LSL DefineRow||[[llSetPrimitiveParams]]|}} | {{LSL DefineRow||[[llSetPrimitiveParams]]|}} | ||
{{LSL DefineRow||[[llSetLinkPrimitiveParams]]|}} | {{LSL DefineRow||[[llSetLinkPrimitiveParams]]|}} | ||
{{LSL DefineRow||[[llSetLinkPrimitiveParamsFast]]|}} | |||
{{LSL DefineRow||[[llGetPrimitiveParams]]|}} | {{LSL DefineRow||[[llGetPrimitiveParams]]|}} | ||
| | {{LSL DefineRow||[[llGetLinkPrimitiveParams]]|}} | ||
{{LSL DefineRow||[[ | {{LSL DefineRow||[[llsRGB2Linear]]|}} | ||
|events | |||
|location | |location | ||
|cat1=Light | |cat1=Light |
Latest revision as of 07:47, 30 June 2022
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Description
Constant: integer PRIM_POINT_LIGHT = 23;The integer constant PRIM_POINT_LIGHT has the value 23
PRIM_POINT_LIGHT is used to configure the point light configuration of the prim
llSetPrimitiveParams
[ PRIM_POINT_LIGHT, integer boolean, vector linear_color, float intensity, float radius, float falloff ]• integer | boolean | – | TRUE enables, FALSE disables | |
• vector | linear_color | – | linear color in RGB <R, G, B> (<0.0, 0.0, 0.0> = black, <1.0, 1.0, 1.0> = white) | |
• float | intensity | – | ranges from 0.0 to 1.0 | |
• float | radius | – | ranges from 0.1 to 20.0 | |
• float | falloff | – | ranges from 0.01 to 2.0 |
When used with llSetPrimitiveParams & llSetLinkPrimitiveParams & llSetLinkPrimitiveParamsFast
llGetPrimitiveParams
llGetPrimitiveParams([ PRIM_POINT_LIGHT ]);Returns the list [ integer boolean, vector linear_color, float intensity, float radius, float falloff ]
• integer | boolean | – | TRUE enables, FALSE disables | |
• vector | linear_color | – | linear color in RGB <R, G, B> (<0.0, 0.0, 0.0> = black, <1.0, 1.0, 1.0> = white) | |
• float | intensity | – | ranges from 0.0 to 1.0 | |
• float | radius | – | ranges from 0.1 to 20.0 | |
• float | falloff | – | ranges from 0.01 to 2.0 |
Caveats
- Viewers that do not have advanced lighting enabled can only render 6 lights at a time and projectors will be rendered as omnidirectional light sources. (OpenGL limitations allow for 8 light sources, SL appears to reserve one each for the Sun and Moon.)
- Viewers that do have advanced lighting enabled can render as many lights as their graphics card allows; it is not hard-limited by the viewer.
- Lights with a high intensity have a wash-out effect when overlapping. Keep this in mind when using multiple lights. Never create an abundance of lights to get around the 6 light maximum in basic lighting, as viewers with advanced lighting will be washed out and may suffer from client lag.
- Unlike most color in LSL, which expects a gamma-encoded value (sRGB), this expects a non-gamma-encoded value (linear RGB). This means that the value you set as the light color is not the same value you'd pass to make the source (e.g. filament ) glow the same color. You may wish to implement an sRGB Electro-Optical Transfer Function (EOTF) to bypass this.
Related Articles
Functions
• | llSetPrimitiveParams | |||
• | llSetLinkPrimitiveParams | |||
• | llSetLinkPrimitiveParamsFast | |||
• | llGetPrimitiveParams | |||
• | llGetLinkPrimitiveParams | |||
• | llsRGB2Linear |
Articles
• | Color in LSL |
Examples
Set the prim's color and the color of the light it emits to the same color:-
integer switch;
vector gLampCol = <255,190,121>; //Light colour in regular (0-255) sRGB space. This will be converted to LSL later.
default
{
state_entry()
{
gLampCol /= 255; //Convert to LSL colour.
}
touch_start(integer total_number)
{
switch = !switch; //toggle the switch
llSetLinkPrimitiveParamsFast(LINK_THIS,[
PRIM_POINT_LIGHT,switch,llsRGB2Linear(gLampCol),1,20,0, //Convert colour to linear RGB as PRIM_POINT_LIGHT requires, using llsRGB2Linear
PRIM_COLOR,ALL_SIDES,gLampCol,1,
PRIM_GLOW,ALL_SIDES,switch,
PRIM_FULLBRIGHT,ALL_SIDES,switch]);
}
}
Basic light script:-
integer isLightTurnedOn;
default
{
touch_start(integer total_number)
{
// toggle isLightTurnedOn between TRUE and FALSE
isLightTurnedOn = !isLightTurnedOn;
if (isLightTurnedOn)
{
llSetPrimitiveParams([
PRIM_FULLBRIGHT, ALL_SIDES, FALSE,
PRIM_POINT_LIGHT, FALSE, ZERO_VECTOR, 1.0, 10.0, 0.6]);
}
else
{
vector COLOR_ORANGE = <1.000, 0.522, 0.106>;
llSetPrimitiveParams([
PRIM_FULLBRIGHT, ALL_SIDES, TRUE,
PRIM_POINT_LIGHT, TRUE, COLOR_ORANGE, 1.0, 10.0, 0.6]);
}
}
}
A compact version of the above:-
integer switch;
default
{
touch_start(integer total_number)
{
llSetPrimitiveParams(
[ PRIM_FULLBRIGHT, ALL_SIDES, switch = !switch,
PRIM_POINT_LIGHT, switch, <1, 0.5, 0.1> * switch, 1, 10, 0.6 ] );
}
}