Difference between revisions of "LlSetLinkTextureAnim"
m (Possessive "it" has no apostrophe.) |
m (The link to PeregrineSalon.com is broken and has been since 2018. I've been in contact with Flipper to see what best to do about it and offer options. System was removed due to overuse in converting gif to be sold on market place with a lot having no concern of copyright. I was going to offer to host it but after that being the reason I am having second thoughts..) |
||
(14 intermediate revisions by 9 users not shown) | |||
Line 1: | Line 1: | ||
[[Category:glTF]] | |||
{{LSL_Function | {{LSL_Function | ||
|inject-2= | |inject-2= | ||
Line 7: | Line 9: | ||
{{Issues/VWR-4018}} | {{Issues/VWR-4018}} | ||
|inject-3= | |inject-3= | ||
{{LSL_Function/negative index|true|start|length={{ | {{LSL_Function/negative index|true|start|length={{LSLPT|length}}}} | ||
|func_id=356 | |func_id=356 | ||
|func_sleep=0.0 | |func_sleep=0.0 | ||
Line 13: | Line 15: | ||
|sort=SetLinkTextureAnim | |sort=SetLinkTextureAnim | ||
|func=llSetLinkTextureAnim | |func=llSetLinkTextureAnim | ||
|p1_type=integer|p1_name=link|p1_desc=to effect|p1_hover=to effect | |p1_type=integer|p1_subtype=link|p1_name=link|p1_desc=to effect|p1_hover=to effect | ||
|p2_type=integer|p2_name=mode|p2_desc= | |p2_type=integer|p2_subtype=bit_field|p2_name=mode|p2_desc=bit field of Mode flags | ||
|p3_type=integer|p3_name=face | |p3_type=integer|p3_name=face | ||
|p4_type=integer|p4_name=sizex|p4_desc=horizontal frames (ignored for [[ROTATE]] and [[SCALE]]) | |p4_type=integer|p4_name=sizex|p4_desc=horizontal frames (ignored for [[ROTATE]] and [[SCALE]]) | ||
Line 20: | Line 22: | ||
|p6_type=float|p6_name=start|p6_desc=Start position/frame number (or radians for [[ROTATE]]) | |p6_type=float|p6_name=start|p6_desc=Start position/frame number (or radians for [[ROTATE]]) | ||
|p7_type=float|p7_name=length|p7_desc=number of frames to display (or radians for [[ROTATE]]) | |p7_type=float|p7_name=length|p7_desc=number of frames to display (or radians for [[ROTATE]]) | ||
|p8_type=float|p8_name=rate|p8_desc= | |p8_type=float|p8_name=rate|p8_desc=Frames per second, or radians per second when [[ROTATE]] is set, or UV coordinates when [[SMOOTH]] is set (must not be zero) | ||
|func_footnote=Frames are numbered from left to right, top to bottom, starting at 0.<br/>If {{LSLP|rate}} is negative, it has the same effect as using the [[REVERSE]] flag.{{Footnote|Though if {{LSLP|rate}} is negative and the [[REVERSE]] flag is used, they cancel each other out.|Though if rate is negative and the REVERSE flag is used, they cancel each other out.}} | |func_footnote=Frames are numbered from left to right, top to bottom, starting at 0.<br/>If {{LSLP|rate}} is negative, it has the same effect as using the [[REVERSE]] flag.{{Footnote|Though if {{LSLP|rate}} is negative and the [[REVERSE]] flag is used, they cancel each other out.|Though if rate is negative and the REVERSE flag is used, they cancel each other out.}}<br/>If {{LSLP|length}} is 0, it is considered to be {{LSLP|sizex}}*{{LSLP|sizey}} if both are above 0, otherwise 1. | ||
|func_desc=Animate the texture on the specified face/faces of the specified prim/prims by setting the texture scale and offset. Identical to [[llSetTextureAnim]] except able to modify any prim in the link set. | |func_desc=Animate the texture on the specified face/faces of the specified prim/prims by setting the texture scale and offset. Identical to [[llSetTextureAnim]] except able to modify any prim in the link set. | ||
|return_text | |return_text | ||
Line 27: | Line 29: | ||
===Frames=== | ===Frames=== | ||
Frames are sub-rectangles within the texture. A set of frames with 2 horizontal ({{LSLP|sizex}}) and 3 vertical ({{LSLP|sizey}}) means the overall texture is divided into 3 rows of 2 columns of images, each of which is a frame. llSetLinkTextureAnim will animate across these 6 starting with the top left image and going across and down, optionally repeating. If [[SMOOTH]] is set the frames slide smoothly from one to the next, if off, each frame is displayed in turn centered on the face. | Frames are sub-rectangles within the texture. A set of frames with 2 horizontal ({{LSLP|sizex}}) and 3 vertical ({{LSLP|sizey}}) means the overall texture is divided into 3 rows of 2 columns of images, each of which is a frame. llSetLinkTextureAnim will animate across these 6 starting with the top left image and going across and down, optionally repeating. If [[SMOOTH]] is set the frames slide smoothly from one to the next, if off, each frame is displayed in turn centered on the face. | ||
|caveats=*You can only have one texture animation on a prim | |caveats=*You can only have one texture animation on a prim. | ||
**Calling llSetLinkTextureAnim more than once on a prim will reset it. | **Calling llSetLinkTextureAnim more than once on a prim will reset it. | ||
**Calling llSetLinkTextureAnim again with exact same values will not reset animation (a small difference in rate will suffice). | **Calling llSetLinkTextureAnim again with exact same values will not reset animation (a small difference in rate will suffice). | ||
*You cannot combine [[ROTATE]] and [[SCALE]] flags. | *You cannot combine [[ROTATE]] and [[SCALE]] flags. | ||
*{{LSLP|sizex}} | *{{LSLP|sizex}} and {{LSLP|sizey}} are both limited to a range of 0 to 255 | ||
* | **Negative sizes behave as if texture repeats were set to 0, and cannot be used to mirror frames. | ||
*Different animation modes override some of the prim's texture parameters, but others can still be used: | |||
**Texture offsets are ignored in frame-based and [[SMOOTH]] scrolling modes. | |||
***Repeats are ignored if {{LSLP|sizex}} and {{LSLP|sizey}} are not 0. | |||
***With either of the sizes set to 0, [[SMOOTH]] scrolling will use the prim's texture repeats. In frame-based animation, there is no meaningful effect. | |||
**The texture rotation is ignored in [[ROTATE]] mode. | |||
**Texture repeats are ignored in [[SCALE]] mode | |||
*Selecting and un-selecting a prim with animation will reset animation from beginning. | *Selecting and un-selecting a prim with animation will reset animation from beginning. | ||
*While a texture animation is active on any face of a prim, [[PRIM_NORMAL]] and [[PRIM_SPECULAR]] are forced to have their repeats, rotations and offsets to match the [[PRIM_TEXTURE]] ones, even on faces that are '''not''' being animated. | |||
|constants={{{!}} class="sortable collapsible" {{Prettytable|style=margin-top:0;}} | |constants={{{!}} class="sortable collapsible" {{Prettytable|style=margin-top:0;}} | ||
{{!}}-{{Hl2}} | {{!}}-{{Hl2}} | ||
Line 69: | Line 78: | ||
{{!}}} | {{!}}} | ||
|examples= | |examples= | ||
This slides a texture smoothly and loops it when it gets to the end. | This slides a texture smoothly, along the horizontal U-axis, and loops it when it gets to the end. | ||
< | |||
For Blinn-Phong materials, the texture's rotation for each side affects the apparent motion. So if the texture is rotated 90 degrees by use of the edit box, the texture may not flow in the direction expected. | |||
For PBR materials, the Blinn-Phong texture rotation for each side affects the apparent motion, and any Blinn-Phong transform component (for example the offsets argument of [[PRIM_TEXTURE]]) which is not animated will be applied to the PBR material as well. Thus, a GLTF material without a GLTF texture transform will animate identically to a Blinn-Phong material. If a GLTF texture transform (for example [[PRIM_GLTF_BASE_COLOR]]) is applied, it will be in addition to the Blinn-Phong transform and texture animation. This allows for more flexibility, however a more complex GLTF texture transform will not loop as easily. | |||
<source lang="lsl2">llSetLinkTextureAnim(LINK_THIS, ANIM_ON | SMOOTH | LOOP , ALL_SIDES, 1, 1, 1, 1, 1);</source> | |||
This slides a texture smoothly in the opposite direction | This slides a texture smoothly, along the horizontal U-axis, in the opposite direction | ||
< | <source lang="lsl2">llSetLinkTextureAnim(LINK_THIS, ANIM_ON | SMOOTH | LOOP , ALL_SIDES, 1, 1, 1, 1, -1);</source> | ||
This divides a texture into 64 "cells", 8 across, and 8 down, and flips through them, left to right, top to bottom. This is useful for cell animation. | This divides a texture into 64 "cells", 8 across, and 8 down, and flips through them, left to right, top to bottom. This is useful for cell animation. | ||
< | <source lang="lsl2">llSetLinkTextureAnim(LINK_THIS, ANIM_ON | LOOP, ALL_SIDES, 8, 8, 0, 64, 6.4 );</source> | ||
This rotates a texture counter-clockwise at 2 revolutions per second. Change the last value to -2*TWO_PI to rotate clockwise. | This rotates a texture counter-clockwise at 2 revolutions per second. Change the last value to -2*TWO_PI to rotate clockwise. | ||
< | <source lang="lsl2">llSetLinkTextureAnim(LINK_THIS, ANIM_ON | SMOOTH | ROTATE | LOOP, ALL_SIDES,1,1,0, TWO_PI, 2*TWO_PI);</source> | ||
This scales a texture larger and smaller. | This scales a texture larger and smaller. | ||
< | <source lang="lsl2">llSetLinkTextureAnim(LINK_THIS, ANIM_ON | SMOOTH | SCALE | PING_PONG | LOOP, ALL_SIDES, 1, 1, 1, 3, 2);</source> | ||
This turns off all texture animations | This turns off all texture animations | ||
< | <source lang="lsl2">llSetLinkTextureAnim(LINK_THIS, FALSE, ALL_SIDES, 0, 0, 0.0, 0.0, 1.0);</source> | ||
|helpers | |helpers | ||
Line 95: | Line 109: | ||
Texture animation is a property of the prim (i.e., you can remove the script that started the animation, and the prim will remember the settings anyway.) Note, though, that as of Jan 2009, texture animation is still one of the prim properties that are lost when using the rezzed in world copy method of shift-drag. Originally brought up in {{Jira|VWR-640}}, it got its own issue in [[#SVC-3925|SVC-3925]] | Texture animation is a property of the prim (i.e., you can remove the script that started the animation, and the prim will remember the settings anyway.) Note, though, that as of Jan 2009, texture animation is still one of the prim properties that are lost when using the rezzed in world copy method of shift-drag. Originally brought up in {{Jira|VWR-640}}, it got its own issue in [[#SVC-3925|SVC-3925]] | ||
An online-tool for rough and ready conversion of moving gifs to animated textures is here: http://www.peregrinesalon.com/anim/ (link valid as of Jan 2009.) | An online-tool for rough and ready conversion of moving gifs to animated textures is here: <s>http://www . peregrinesalon . com/anim/</s> (Link Broken Dec 2023/link valid as of Jan 2009.) | ||
|cat1=Media | |cat1=Media | ||
|cat2=Effects | |cat2=Effects | ||
Line 102: | Line 116: | ||
|cat5 | |cat5 | ||
|cat6 | |cat6 | ||
|history= *Date of release [[ Release_Notes/Second_Life_Server/1.38#New_Features | 29-03-2010 ]] | |||
}} | }} |
Latest revision as of 07:10, 18 December 2023
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Summary
Function: llSetLinkTextureAnim( integer link, integer mode, integer face, integer sizex, integer sizey, float start, float length, float rate );0.0 | Forced Delay |
10.0 | Energy |
Animate the texture on the specified face/faces of the specified prim/prims by setting the texture scale and offset. Identical to llSetTextureAnim except able to modify any prim in the link set.
• integer | link | – | Link number (0: unlinked, 1: root prim, >1: child prims and seated avatars) or a LINK_* flag to effect
|
|
• integer | mode | – | bit field of Mode flags | |
• integer | face | – | face number or ALL_SIDES | |
• integer | sizex | – | horizontal frames (ignored for ROTATE and SCALE) | |
• integer | sizey | – | vertical frames (ignored for ROTATE and SCALE) | |
• float | start | – | Start position/frame number (or radians for ROTATE) | |
• float | length | – | number of frames to display (or radians for ROTATE) | |
• float | rate | – | Frames per second, or radians per second when ROTATE is set, or UV coordinates when SMOOTH is set (must not be zero) |
If face is ALL_SIDES then the function works on all sides.
start supports negative indexes.
Frames are numbered from left to right, top to bottom, starting at 0.
If rate is negative, it has the same effect as using the REVERSE flag.[2]
If length is 0, it is considered to be sizex*sizey if both are above 0, otherwise 1.
Specification
Index | Positive | Negative |
---|---|---|
First | 0
|
-length
|
Last | length - 1
|
-1
|
Indexes
- Positive indexes count from the beginning, the first item being indexed as
0
, the last as(length - 1)
.
- Negative indexes count from the far end, the first item being indexed as
-length
, the last as-1
.
Frames
Frames are sub-rectangles within the texture. A set of frames with 2 horizontal (sizex) and 3 vertical (sizey) means the overall texture is divided into 3 rows of 2 columns of images, each of which is a frame. llSetLinkTextureAnim will animate across these 6 starting with the top left image and going across and down, optionally repeating. If SMOOTH is set the frames slide smoothly from one to the next, if off, each frame is displayed in turn centered on the face.
|
|
Modes | Description | |
---|---|---|
ANIM_ON | 0x01 | Texture animation is on. This must be set to start the animation, cleared to stop it. |
LOOP | 0x02 | Loop the texture animation. |
REVERSE | 0x04 | Play animation in reverse direction. |
PING_PONG | 0x08 | Play animation going forwards, then backwards. |
SMOOTH | 0x10 | Slide in the X direction, instead of playing separate frames. In both SCALE and ROTATE modes, causes smooth transitions. |
ROTATE | 0x20 | Animate texture rotation. Does not work with SCALE |
SCALE | 0x40 | Animate the texture scale. Does not work with ROTATE |
Caveats
- The function silently fails if its face value indicates a face that does not exist.
- If start is out of bounds the script continues to execute without an error message.
- You can only have one texture animation on a prim.
- Calling llSetLinkTextureAnim more than once on a prim will reset it.
- Calling llSetLinkTextureAnim again with exact same values will not reset animation (a small difference in rate will suffice).
- You cannot combine ROTATE and SCALE flags.
- sizex and sizey are both limited to a range of 0 to 255
- Negative sizes behave as if texture repeats were set to 0, and cannot be used to mirror frames.
- Different animation modes override some of the prim's texture parameters, but others can still be used:
- Texture offsets are ignored in frame-based and SMOOTH scrolling modes.
- Repeats are ignored if sizex and sizey are not 0.
- With either of the sizes set to 0, SMOOTH scrolling will use the prim's texture repeats. In frame-based animation, there is no meaningful effect.
- The texture rotation is ignored in ROTATE mode.
- Texture repeats are ignored in SCALE mode
- Texture offsets are ignored in frame-based and SMOOTH scrolling modes.
- Selecting and un-selecting a prim with animation will reset animation from beginning.
- While a texture animation is active on any face of a prim, PRIM_NORMAL and PRIM_SPECULAR are forced to have their repeats, rotations and offsets to match the PRIM_TEXTURE ones, even on faces that are not being animated.
Examples
This slides a texture smoothly, along the horizontal U-axis, and loops it when it gets to the end.
For Blinn-Phong materials, the texture's rotation for each side affects the apparent motion. So if the texture is rotated 90 degrees by use of the edit box, the texture may not flow in the direction expected.
For PBR materials, the Blinn-Phong texture rotation for each side affects the apparent motion, and any Blinn-Phong transform component (for example the offsets argument of PRIM_TEXTURE) which is not animated will be applied to the PBR material as well. Thus, a GLTF material without a GLTF texture transform will animate identically to a Blinn-Phong material. If a GLTF texture transform (for example PRIM_GLTF_BASE_COLOR) is applied, it will be in addition to the Blinn-Phong transform and texture animation. This allows for more flexibility, however a more complex GLTF texture transform will not loop as easily.
llSetLinkTextureAnim(LINK_THIS, ANIM_ON | SMOOTH | LOOP , ALL_SIDES, 1, 1, 1, 1, 1);
This slides a texture smoothly, along the horizontal U-axis, in the opposite direction
llSetLinkTextureAnim(LINK_THIS, ANIM_ON | SMOOTH | LOOP , ALL_SIDES, 1, 1, 1, 1, -1);
This divides a texture into 64 "cells", 8 across, and 8 down, and flips through them, left to right, top to bottom. This is useful for cell animation.
llSetLinkTextureAnim(LINK_THIS, ANIM_ON | LOOP, ALL_SIDES, 8, 8, 0, 64, 6.4 );
This rotates a texture counter-clockwise at 2 revolutions per second. Change the last value to -2*TWO_PI to rotate clockwise.
llSetLinkTextureAnim(LINK_THIS, ANIM_ON | SMOOTH | ROTATE | LOOP, ALL_SIDES,1,1,0, TWO_PI, 2*TWO_PI);
This scales a texture larger and smaller.
llSetLinkTextureAnim(LINK_THIS, ANIM_ON | SMOOTH | SCALE | PING_PONG | LOOP, ALL_SIDES, 1, 1, 1, 3, 2);
This turns off all texture animations
llSetLinkTextureAnim(LINK_THIS, FALSE, ALL_SIDES, 0, 0, 0.0, 0.0, 1.0);
Notes
Link Numbers
Each prim that makes up an object has an address, a link number. To access a specific prim in the object, the prim's link number must be known. In addition to prims having link numbers, avatars seated upon the object do as well.
- If an object consists of only one prim, and there are no avatars seated upon it, the (root) prim's link number is zero.
- However, if the object is made up of multiple prims or there is an avatar seated upon the object, the root prim's link number is one.
When an avatar sits on an object, it is added to the end of the link set and will have the largest link number. In addition to this, while an avatar is seated upon an object, the object is unable to link or unlink prims without unseating all avatars first.
Counting Prims & Avatars
There are two functions of interest when trying to find the number of prims and avatars on an object.
llGetNumberOfPrims()
- Returns the number of prims and seated avatars.llGetObjectPrimCount(llGetKey())
- Returns only the number of prims in the object but will return zero for attachments.
integer GetPrimCount() { //always returns only the number of prims
if(llGetAttached())//Is it attached?
return llGetNumberOfPrims();//returns avatars and prims but attachments can't be sat on.
return llGetObjectPrimCount(llGetKey());//returns only prims but won't work on attachments.
}
Errata
If a script located in a child prim erroneously attempts to access link 0, it will get or set the property of the linkset's root prim. This bug (BUG-5049) is preserved for broken legacy scripts. Texture animation is a property of the prim (i.e., you can remove the script that started the animation, and the prim will remember the settings anyway.) Note, though, that as of Jan 2009, texture animation is still one of the prim properties that are lost when using the rezzed in world copy method of shift-drag. Originally brought up in VWR-640, it got its own issue in SVC-3925
An online-tool for rough and ready conversion of moving gifs to animated textures is here: http://www . peregrinesalon . com/anim/ (Link Broken Dec 2023/link valid as of Jan 2009.)
See Also
Functions
• | llGetLinkNumber | – | Returns the link number of the prim the script is in. | |
• | llSetTextureAnim | – | Set texture animation for the prim the script is on. |
Articles
• | Negative Index |
- Pages using deprecated source tags
- GlTF
- LSL Face
- LSL Face/Set
- LSL Link
- LSL Negative Index
- Articles in need of haiku
- LSL Functions
- LSL Functions/Returns nothing
- LSL Parameters/mode
- LSL Parameters/sizex
- LSL Parameters/sizey
- LSL Parameters/start
- LSL Parameters/length
- LSL Parameters/rate
- LSL Keywords/All
- LSL topics with bugs
- LSL Media
- LSL Effects
- LSL Texture
- LSL Video