Difference between revisions of "LlSetCameraParams"

From Second Life Wiki
Jump to navigation Jump to search
(added that CAMERA_FOCUS always matches avatar's llGetPos())
(19 intermediate revisions by 11 users not shown)
Line 1: Line 1:
{{LSL_Function/permission|PERMISSION_CONTROL_CAMERA}}{{LSL_Function
{{LSL_Function
|inject-2={{Issues/SCR-325}}{{Issues/SCR-326}}{{Issues/SCR-327}}{{LSL_Function/permission|PERMISSION_CONTROL_CAMERA}}
|func_id=313|func_sleep=0.0|func_energy=10.0
|func_id=313|func_sleep=0.0|func_energy=10.0
|func=llSetCameraParams
|func=llSetCameraParams
|p1_type=list|p1_name=rules|p1_desc=Format is [ rule1, data1, rule2, data2 . . . rulen, datan ]
|p1_type=list|p1_subtype=instructions|p1_name=rules|p1_desc=Format is [ rule1, data1, rule2, data2 . . . rulen, datan ]
|func_footnote
|func_footnote
|func_desc=Sets multiple camera parameters at once.
|func_desc=Sets multiple camera parameters at once.
|return_text
|return_text
|spec
|spec
|caveats
|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]].
|examples=<pre>llSetCameraParams([
*Scripted camera parameters will not set for the agent if the last controls they used were their camera controls. Manual camera control will override set parameters too.
         CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
*A CAMERA_FOCUS_OFFSET of <0, 0, 0> will always look at the same position as returned by llGetPos() for the avatar
        CAMERA_BEHINDNESS_ANGLE, 10.0, // (0 to 180) degrees
**When seated, this is also the position of "Avatar Center" when hover height is 0
        CAMERA_BEHINDNESS_LAG, 0.0, // (0 to 3) seconds
**When standing, this has a shape-dependent z-offset from "Avatar Center". (currently investigating [[User:Tapple Gao|Tapple Gao]] ([[User talk:Tapple Gao|talk]]))
        CAMERA_DISTANCE, 3.0, // ( 0.5 to 10) meters
|examples=
        // CAMERA_FOCUS, <0,0,0>, // region-relative position
 
        CAMERA_FOCUS_LAG, 0.1 , // (0 to 3) seconds
You can either set the camera in region relative coordinates or you can make the camera follow your avatar.
        CAMERA_FOCUS_LOCKED, FALSE, // (TRUE or FALSE)
 
        CAMERA_FOCUS_THRESHOLD, 1.0, // (0 to 4) meters
'''Region relative coordinates, an example:'''
        CAMERA_PITCH, 0.0, // (-45 to 80) degrees
 
        // CAMERA_POSITION, <0,0,0>, // region-relative position
<source lang="lsl2">lookAtMe( integer perms )
        CAMERA_POSITION_LAG, 0.1, // (0 to 3) seconds
{
        CAMERA_POSITION_LOCKED, FALSE, // (TRUE or FALSE)
    if ( perms & PERMISSION_CONTROL_CAMERA )
        CAMERA_POSITION_THRESHOLD, 1.0, // (0 to 4) meters
    {
        CAMERA_FOCUS_OFFSET, ZERO_VECTOR // <-10,-10,-10> to <10,10,10> meters
        vector camPos = llGetPos() + (relCamP * llGetRot() * turnOnChair) ;
    ]);</pre>
        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)
        ]);
    }
}</source>
Note that Focus and Position are both locked. This first example makes the camera look at ''camFocus'' from ''camPos''.
 
'''Camera follow avatar, an example:'''
 
<source lang="lsl2">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
        ]);
    }
}
</source>
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.
|helpers
|helpers
|also_functions={{LSL DefineRow||[[llClearCameraParams]]}}
|also_functions=
{{LSL DefineRow||[[llClearCameraParams]]}}
{{LSL DefineRow||[[llGetCameraPos]]}}
{{LSL DefineRow||[[llGetCameraRot]]}}
|also_events
|also_events
|also_tests
|also_tests=
|also_articles
{{LSL DefineRow||[[llSetCameraParams Test]]}}
|also_articles=
{{LSL DefineRow||[[FollowCam]]}}
|notes
|notes
|cat1=Camera
|cat1=Camera
Line 34: Line 79:
|cat3
|cat3
|cat4
|cat4
|constants={{{!}} class="sortable" {{Prettytable}}
|constants={{{!}} class="sortable" {{Prettytable|style=margin-top:0;}}
{{!}}- {{Hl2}}
{{!}}- {{Hl2}}
! Rule
! Rule
Line 68: Line 113:
{{!}} [[float]]&nbsp;meters
{{!}} [[float]]&nbsp;meters
{{!}} 3.0
{{!}} 3.0
{{!}} 0.5 to 10
{{!}} 0.5 to 50
{{!}} Sets how far away the camera wants to be from its target.
{{!}} Sets how far away the camera wants to be from its target.
{{!}}-  
{{!}}-  

Revision as of 10:08, 26 November 2021

Summary

Function: llSetCameraParams( list rules );

Sets multiple camera parameters at once.

• list rules Format is [ rule1, data1, rule2, data2 . . . rulen, datan ]

To run this function the script must request the PERMISSION_CONTROL_CAMERA permission with llRequestPermissions.

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

Permissions
  • The PERMISSION_CONTROL_CAMERA permission is automatically revoked when the avatar stands up from or detaches the object, and any scripted camera parameters are automatically cleared.
  • 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 will not set for the agent if the last controls they used were their camera controls. Manual camera control will override set parameters too.
  • A CAMERA_FOCUS_OFFSET of <0, 0, 0> 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))
All Issues ~ Search JIRA for related Bugs

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

Events

•  run_time_permissions Permission receiving event

Functions

•  llGetPermissions Get the permissions granted
•  llGetPermissionsKey Get the agent who granted permissions
•  llRequestPermissions Request permissions
•  llClearCameraParams
•  llGetCameraPos
•  llGetCameraRot

Articles

•  Script permissions
•  FollowCam

Deep Notes

All Issues

~ Search JIRA for related Issues
   Damping Parameters for llSetCameraParams()
   CAMERA_FOCUS_TARGET and CAMERA_POSITION_TARGET parameters for llSetCameraParams()
   Improvements to llSetCameraParams()

Tests

•  llSetCameraParams Test

Signature

function void llSetCameraParams( list rules );