Skip to content

Commit 637c77d

Browse files
georginahalpernGeorgina Halpern
andauthored
[FloatingOrigin] Add support for Sprites (#17406)
Offset sprites position in vertex buffer data (as sprites.vertex shader doesn't use world matrix) http://localhost:1338/#P3E9YP#287 Co-authored-by: Georgina Halpern <[email protected]>
1 parent be575c0 commit 637c77d

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

packages/dev/core/src/Sprites/spriteRenderer.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import type { ThinEngine } from "../Engines/thinEngine";
1414
import { Logger } from "../Misc/logger";
1515
import { BindLogDepth } from "../Materials/materialHelper.functions.pure";
1616
import { 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

Comments
 (0)