Skip to content

Commit 434c8d1

Browse files
committed
Fixed issue with sprite matrix and camera scaling
1 parent 4d5eb47 commit 434c8d1

6 files changed

Lines changed: 222 additions & 41 deletions

File tree

src/gameobjects/bitmaptext/static/BitmapTextWebGLRenderer.js

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,14 @@ var BitmapTextWebGLRenderer = function (renderer, src, interpolationPercentage,
3636

3737
renderer.setPipeline(pipeline);
3838

39-
var camMatrix = pipeline._tempCameraMatrix;
40-
var spriteMatrix = pipeline._tempSpriteMatrix;
39+
var camMatrix = pipeline._tempMatrix1;
40+
var spriteMatrix = pipeline._tempMatrix2;
41+
var calcMatrix = pipeline._tempMatrix3;
4142

42-
spriteMatrix.applyITRS(src.x - camera.scrollX * src.scrollFactorX, src.y - camera.scrollY * src.scrollFactorY, src.rotation, src.scaleX, src.scaleY);
43+
spriteMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);
4344

4445
camMatrix.copyFrom(camera.matrix);
4546

46-
var calcMatrix;
47-
4847
if (parentMatrix)
4948
{
5049
// Multiply the camera by the parent matrix
@@ -54,12 +53,16 @@ var BitmapTextWebGLRenderer = function (renderer, src, interpolationPercentage,
5453
spriteMatrix.e = src.x;
5554
spriteMatrix.f = src.y;
5655

57-
// Multiply by the Sprite matrix
58-
calcMatrix = camMatrix.multiply(spriteMatrix);
56+
// Multiply by the Sprite matrix, store result in calcMatrix
57+
camMatrix.multiply(spriteMatrix, calcMatrix);
5958
}
6059
else
6160
{
62-
calcMatrix = camMatrix.multiply(spriteMatrix);
61+
spriteMatrix.e -= camera.scrollX * src.scrollFactorX;
62+
spriteMatrix.f -= camera.scrollY * src.scrollFactorY;
63+
64+
// Multiply by the Sprite matrix, store result in calcMatrix
65+
camMatrix.multiply(spriteMatrix, calcMatrix);
6366
}
6467

6568
var frame = src.frame;

src/gameobjects/blitter/BlitterWebGLRenderer.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ var BlitterWebGLRenderer = function (renderer, src, interpolationPercentage, cam
3636
var cameraScrollX = camera.scrollX * src.scrollFactorX;
3737
var cameraScrollY = camera.scrollY * src.scrollFactorY;
3838

39-
var matrix = pipeline._tempCameraMatrix;
39+
var matrix = pipeline._tempMatrix1;
4040

4141
matrix.copyFrom(camera.matrix);
4242

@@ -107,6 +107,7 @@ var BlitterWebGLRenderer = function (renderer, src, interpolationPercentage, cam
107107
{
108108
tx0 |= 0;
109109
ty0 |= 0;
110+
110111
tx1 |= 0;
111112
ty1 |= 0;
112113
}

src/gameobjects/image/ImageWebGLRenderer.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,9 @@ var ImageWebGLRenderer = function (renderer, src, interpolationPercentage, camer
2727
{
2828
return;
2929
}
30-
30+
3131
this.pipeline.batchSprite(src, camera, parentMatrix);
32+
3233
};
3334

3435
module.exports = ImageWebGLRenderer;

src/gameobjects/mesh/MeshWebGLRenderer.js

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,14 @@ var MeshWebGLRenderer = function (renderer, src, interpolationPercentage, camera
3333

3434
renderer.setPipeline(pipeline);
3535

36-
var camMatrix = pipeline._tempCameraMatrix;
37-
var spriteMatrix = pipeline._tempSpriteMatrix;
36+
var camMatrix = pipeline._tempMatrix1;
37+
var spriteMatrix = pipeline._tempMatrix2;
38+
var calcMatrix = pipeline._tempMatrix3;
3839

39-
spriteMatrix.applyITRS(src.x - camera.scrollX * src.scrollFactorX, src.y - camera.scrollY * src.scrollFactorY, src.rotation, src.scaleX, src.scaleY);
40+
spriteMatrix.applyITRS(src.x, src.y, src.rotation, src.scaleX, src.scaleY);
4041

4142
camMatrix.copyFrom(camera.matrix);
4243

43-
var calcMatrix;
44-
4544
if (parentMatrix)
4645
{
4746
// Multiply the camera by the parent matrix
@@ -51,13 +50,17 @@ var MeshWebGLRenderer = function (renderer, src, interpolationPercentage, camera
5150
spriteMatrix.e = src.x;
5251
spriteMatrix.f = src.y;
5352

54-
// Multiply by the Sprite matrix
55-
calcMatrix = camMatrix.multiply(spriteMatrix);
53+
// Multiply by the Sprite matrix, store result in calcMatrix
54+
camMatrix.multiply(spriteMatrix, calcMatrix);
5655
}
5756
else
5857
{
59-
calcMatrix = camMatrix.multiply(spriteMatrix);
60-
}
58+
spriteMatrix.e -= camera.scrollX * src.scrollFactorX;
59+
spriteMatrix.f -= camera.scrollY * src.scrollFactorY;
60+
61+
// Multiply by the Sprite matrix, store result in calcMatrix
62+
camMatrix.multiply(spriteMatrix, calcMatrix);
63+
}
6164

6265
var frame = src.frame;
6366
var texture = frame.glTexture;

src/renderer/webgl/WebGLRenderer.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1536,6 +1536,7 @@ var WebGLRenderer = new Class({
15361536
pipelines[key].onRender(scene, camera);
15371537
}
15381538

1539+
// Apply scissor for cam region + render background color, if not transparent
15391540
this.preRenderCamera(camera);
15401541

15411542
for (var index = 0; index < childCount; ++index)
@@ -1567,6 +1568,8 @@ var WebGLRenderer = new Class({
15671568

15681569
this.flush();
15691570
this.setBlendMode(CONST.BlendModes.NORMAL);
1571+
1572+
// Applies camera effects and pops the scissor, if set
15701573
this.postRenderCamera(camera);
15711574
},
15721575

0 commit comments

Comments
 (0)