LlSetCameraParams
Looking for the current API? Open the llSetCameraParams reference →
Wiki description
Sets multiple camera parameters at once.
Specification
| Rule | Parameter | Default | Value Range | Description | |
|---|---|---|---|---|---|
| CAMERA_ACTIVE | 12 | integer isActive | FALSE | TRUE or FALSE | Turns on or off scripted control of the camera. |
| CAMERA_BEHINDNESS_ANGLE | 8 | float degrees | 10.0 | 0 to 180 | Sets the angle in degrees within which the camera is not constrained by changes in target rotation. |
| CAMERA_BEHINDNESS_LAG | 9 | float seconds | 0.0 | 0 to 3 | Sets how strongly the camera is forced to stay behind the target if outside of behindness angle. |
| CAMERA_DISTANCE | 7 | float meters | 3.0 | 0.5 to 50 | Sets how far away the camera wants to be from its target. |
| CAMERA_FOCUS | 17 | vector position | n/a | n/a | Sets camera focus (target position) in region coordinates. |
| CAMERA_FOCUS_LAG | 6 | float seconds | 0.1 | 0 to 3 | How much the camera lags as it tries to aim towards the target. |
| CAMERA_FOCUS_LOCKED | 22 | integer isLocked | FALSE | TRUE or FALSE | Locks the camera focus so it will not move. |
| CAMERA_FOCUS_OFFSET | 1 | vector meters | <0.0,0.0,0.0> | <-10,-10,-10> to <10,10,10> | Adjusts the camera focus position relative to the target. |
| CAMERA_FOCUS_THRESHOLD | 11 | float meters | 1.0 | 0 to 4 | Sets the radius of a sphere around the camera's target position within which its focus is not affected by target motion. |
| CAMERA_PITCH | 0 | float degrees | 0.0 | -45 to 80 | Adjusts the angular amount that the camera aims straight ahead vs. straight down, maintaining the same distance; analogous to 'incidence'." |
| CAMERA_POSITION | 13 | vector position | n/a | n/a | Sets camera position in region coordinates. |
| CAMERA_POSITION_LAG | 5 | float seconds | 0.1 | 0 to 3 | How much the camera lags as it tries to move towards its 'ideal' position. |
| CAMERA_POSITION_LOCKED | 21 | integer isLocked | FALSE | TRUE or FALSE | Locks the camera position so it will not move. |
| CAMERA_POSITION_THRESHOLD | 10 | float meters | 1.0 | 0 to 4 | Sets the radius of a sphere around the camera's ideal position within which it is not affected by target motion. |
Caveats
- Camera control currently (server 1.38) only supported for attachments and objects on which you are sitting. An attempt otherwise will result in an error being shouted on DEBUG_CHANNEL.
- Scripted camera parameters are overriden for agents who are in Free Camera mode (Alt + Click). No error is returned if this is the case; however when the agent returns to regular camera mode, their camera will go to the scripted camera position.
- When CAMERA_FOCUS is not defined, it is advised that CAMERA_FOCUS_THRESHOLD is set to 0.0 - this is because when left at it's default value, it may prevent the camera from focusing on the correct point, instead focusing just to the side of the intended point.
- A CAMERA_FOCUS_OFFSET of ZERO_VECTOR will always look at the same position as returned by llGetPos() for the avatar
- When seated, this is also the position of "Avatar Center" when hover height is 0
- When standing, this has a shape-dependent z-offset from "Avatar Center". (currently investigating Tapple Gao (talk))
- Cannot be used to control the camera in Mouselook.
Examples
You can either set the camera in region relative coordinates or you can make the camera follow your avatar.
Region relative coordinates, an example:
lookAtMe( integer perms )
{
if ( perms & PERMISSION_CONTROL_CAMERA )
{
vector camPos = llGetPos() + (relCamP * llGetRot() * turnOnChair) ;
vector camFocus = llGetPos() ;
llClearCameraParams(); // reset camera to default
llSetCameraParams([
CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
CAMERA_FOCUS, camFocus, // region relative position
CAMERA_FOCUS_LOCKED, TRUE, // (TRUE or FALSE)
CAMERA_POSITION, camPos, // region relative position
CAMERA_POSITION_LOCKED, TRUE // (TRUE or FALSE)
]);
}
}Note that Focus and Position are both locked. This first example makes the camera look at camFocus from camPos.
Camera follow avatar, an example:
lookAtMe( integer perms )
{
if ( perms & PERMISSION_CONTROL_CAMERA )
{
llClearCameraParams(); // reset camera to default
llSetCameraParams([
CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
CAMERA_BEHINDNESS_ANGLE, 30.0, // (0 to 180) degrees
CAMERA_BEHINDNESS_LAG, 0.0, // (0 to 3) seconds
CAMERA_DISTANCE, 10.0, // ( 0.5 to 10) meters
//CAMERA_FOCUS, <0,0,5>, // region relative position
CAMERA_FOCUS_LAG, 0.05 , // (0 to 3) seconds
CAMERA_FOCUS_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_FOCUS_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_PITCH, 10.0, // (-45 to 80) degrees
//CAMERA_POSITION, <0,0,0>, // region relative position
CAMERA_POSITION_LAG, 0.0, // (0 to 3) seconds
CAMERA_POSITION_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_POSITION_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_FOCUS_OFFSET, <2.0, 0.0, 0.0> // <-10,-10,-10> to <10,10,10> meters
]);
}
}Note that in this second example Focus and Position are NOT locked and not even set. This is appropriate for making the camera follow a pilot on a vehicle.
See also: functions
See also: articles
Tests
Shared wiki helpers
The original page also injects shared parameter notes, caveats or issue information through these helpers. Their conditional MediaWiki logic is not reproduced here; inspect the preserved helper source for additional material.
Original shared helper source (conditional wiki logic is not evaluated)
{{Issues|SCR-325|Damping Parameters for [[llSetCameraParams]]()|type=nf}}Original shared helper source (conditional wiki logic is not evaluated)
{{Issues|SCR-326|<code>CAMERA_FOCUS_TARGET</code> and <code>CAMERA_POSITION_TARGET</code> parameters for [[llSetCameraParams]]()|type=nf}}Original shared helper source (conditional wiki logic is not evaluated)
{{Issues|SCR-327|Improvements to [[llSetCameraParams]]()|type=meta}}Template:LSL Function/permission
Original shared helper source (conditional wiki logic is not evaluated)
{{#if:
{{{{#if:{{#var:DEBUG_CHANNEL}}||:DEBUG_CHANNEL}}|}}
{{#vardefine:header_footnote|{{#var:header_footnote}}{{#if:{{{1|<noinclude>*</noinclude>}}}|To run this function the script must request the [[{{{1}}}]] {{#if:{{{2|}}}|or [[{{{2}}}]]}} permission with [[llRequestPermissions]]{{#ifeq:{{{grant|anyone}}}|anyone|| and it must be granted by {{{grant|anyone}}}}}.}}}}
{{#vardefine:caveats|{{#var:caveats}}{{#if:{{{1|<noinclude>*</noinclude>}}}|{{PBR}}
<div style="border: 1px dotted rgba(0,0,0,0.5);">{{Collapsible_Table/Simple|title=<h5 style="margin:0;">Permissions</h5>|table-style=width:100%;|autocollapse=*|content={{!}}<div>
* Do not depend upon the auto-grant status of permissions. '''Always''' use the [[run_time_permissions]] event.
* If the script lacks {{#if:{{{2|}}}|both the permissions [[{{{1}}}]] and [[{{{2}}}]]|the permission [[{{{1}}}]]}}, the script will shout an error on {{#var:DEBUG_CHANNEL}} and the operation fails (but the script continues to run).{{#ifeq:{{{grant|anyone<noinclude>*</noinclude>}}}|anyone||
* If [[{{{1}}}]] {{#if:{{{2|}}}|or [[{{{2}}}]]}} is granted by anyone other than {{{grant|anyone}}}, then when the function is called an error will be shouted on {{#var:DEBUG_CHANNEL}}.}}
{{{caveats|}}}{{LSL Function/permission/caveat switch|{{{1}}}}}{{#if:{{{2|}}}|{{LSL Function/permission/caveat switch|{{{2}}}}}}}</div>}}</div>}}}}
{{#vardefine:also_events|{{#var:also_events}}
{{LSL DefineRow||[[run_time_permissions]]|Permission receiving event}}}}
{{#vardefine:also_functions|{{#var:also_functions}}
{{LSL DefineRow||[[llGetPermissions]]|Get the permissions granted}}
{{LSL DefineRow||[[llGetPermissionsKey]]|Get the agent who granted permissions}}
{{LSL DefineRow||[[llRequestPermissions]]|Request permissions}}}}
{{#vardefine:also_articles|{{#var:also_articles}}
{{LSL DefineRow||[[:Category:LSL Permissions/Script|Script permissions]]|}}}}
<includeonly>{{#if:{{{nc|}}}||{{#vardefine:hidden-text|{{#var:hidden-text}}
{{#if:{{#pos:{{#var:moded}}|r}}{{#pos:{{#var:moded}}|u}}||[[Category:LSL Requires Permissions]]}}
}}}}</includeonly>
}}<noinclude>
{| {{Prettytable}}
|-{{Hl2}}
! #var
! value
|-
{{VarPair|header_footnote}}
|-
{{VarPair|caveats}}
|-
{{VarPairTable|also_events}}
|-
{{VarPairTable|also_functions}}
|-
{{VarPairTable|also_articles}}
|}
</noinclude>Original wiki source
Some wiki templates and tables need their original context. View this article on the Second Life Wiki. Technical wording and examples are retained from the source; historical guidance may differ from current behavior.