@@ -14,6 +14,7 @@ import type { ThinEngine } from "../Engines/thinEngine";
1414import { Logger } from "../Misc/logger" ;
1515import { BindLogDepth } from "../Materials/materialHelper.functions.pure" ;
1616import { ShaderLanguage } from "../Materials/shaderLanguage" ;
17+ import { Vector3 } from "../Maths/math.vector" ;
1718
1819/**
1920 * Options for the SpriteRenderer
@@ -343,6 +344,7 @@ export class SpriteRenderer {
343344
344345 let offset = 0 ;
345346 let noSprite = true ;
347+ const floatingOriginOffset = this . _scene ?. floatingOriginOffset || Vector3 . ZeroReadOnly ;
346348 for ( let index = 0 ; index < max ; index ++ ) {
347349 const sprite = sprites [ index ] ;
348350 if ( ! sprite || ! sprite . isVisible ) {
@@ -353,11 +355,11 @@ export class SpriteRenderer {
353355 sprite . _animate ( deltaTime ) ;
354356 const baseSize = this . texture . getBaseSize ( ) ; // This could be change by the user inside the animate callback (like onAnimationEnd)
355357
356- this . _appendSpriteVertex ( offset ++ , sprite , 0 , 0 , baseSize , useRightHandedSystem , customSpriteUpdate ) ;
358+ this . _appendSpriteVertex ( offset ++ , sprite , 0 , 0 , baseSize , useRightHandedSystem , customSpriteUpdate , floatingOriginOffset ) ;
357359 if ( ! this . _useInstancing ) {
358- this . _appendSpriteVertex ( offset ++ , sprite , 1 , 0 , baseSize , useRightHandedSystem , customSpriteUpdate ) ;
359- this . _appendSpriteVertex ( offset ++ , sprite , 1 , 1 , baseSize , useRightHandedSystem , customSpriteUpdate ) ;
360- this . _appendSpriteVertex ( offset ++ , sprite , 0 , 1 , baseSize , useRightHandedSystem , customSpriteUpdate ) ;
360+ this . _appendSpriteVertex ( offset ++ , sprite , 1 , 0 , baseSize , useRightHandedSystem , customSpriteUpdate , floatingOriginOffset ) ;
361+ this . _appendSpriteVertex ( offset ++ , sprite , 1 , 1 , baseSize , useRightHandedSystem , customSpriteUpdate , floatingOriginOffset ) ;
362+ this . _appendSpriteVertex ( offset ++ , sprite , 0 , 1 , baseSize , useRightHandedSystem , customSpriteUpdate , floatingOriginOffset ) ;
361363 }
362364 }
363365
@@ -446,7 +448,8 @@ export class SpriteRenderer {
446448 offsetY : number ,
447449 baseSize : ISize ,
448450 useRightHandedSystem : boolean ,
449- customSpriteUpdate : Nullable < ( sprite : ThinSprite , baseSize : ISize ) => void >
451+ customSpriteUpdate : Nullable < ( sprite : ThinSprite , baseSize : ISize ) => void > ,
452+ floatingOriginOffset : Vector3
450453 ) : void {
451454 let arrayOffset = index * this . _vertexBufferSize ;
452455
@@ -478,9 +481,9 @@ export class SpriteRenderer {
478481 }
479482
480483 // Positions
481- this . _vertexData [ arrayOffset ] = sprite . position . x ;
482- this . _vertexData [ arrayOffset + 1 ] = sprite . position . y ;
483- this . _vertexData [ arrayOffset + 2 ] = sprite . position . z ;
484+ this . _vertexData [ arrayOffset ] = sprite . position . x - floatingOriginOffset . x ;
485+ this . _vertexData [ arrayOffset + 1 ] = sprite . position . y - floatingOriginOffset . y ;
486+ this . _vertexData [ arrayOffset + 2 ] = sprite . position . z - floatingOriginOffset . z ;
484487 this . _vertexData [ arrayOffset + 3 ] = sprite . angle ;
485488 // Options
486489 this . _vertexData [ arrayOffset + 4 ] = sprite . width ;
0 commit comments