Skip to content

Commit 3b29616

Browse files
committed
Camera input transform update
1 parent e9a71be commit 3b29616

7 files changed

Lines changed: 94 additions & 36 deletions

File tree

v3/src/camera/2d/Camera.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ var Camera = new Class({
6565
this._id = 0;
6666
},
6767

68-
cameraToScreen: require('./inc/CameraToScreen'),
68+
cameraToWorld: require('./inc/CameraToWorld'),
6969
centerToBounds: require('./inc/CenterToBounds'),
7070
centerToSize: require('./inc/CenterToSize'),
7171
cull: require('./inc/Cull'),
@@ -77,7 +77,6 @@ var Camera = new Class({
7777
ignore: require('./inc/Ignore'),
7878
preRender: require('./inc/PreRender'),
7979
removeBounds: require('./inc/RemoveBounds'),
80-
screenToCamera: require('./inc/ScreenToCamera'),
8180
setAngle: require('./inc/SetAngle'),
8281
setBackgroundColor: require('./inc/SetBackgroundColor'),
8382
setBounds: require('./inc/SetBounds'),
@@ -94,7 +93,8 @@ var Camera = new Class({
9493
startFollow: require('./inc/StartFollow'),
9594
stopFollow: require('./inc/StopFollow'),
9695
toJSON: require('./inc/ToJSON'),
97-
update: require('./inc/Update')
96+
update: require('./inc/Update'),
97+
worldToCamera: require('./inc/WorldToCamera')
9898

9999
});
100100

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
var CameraToScreen = function (pointIn, pointOut)
1+
var CameraToWorld = function (pointIn, pointOut)
22
{
33
var cameraMatrix = this.matrix.matrix;
44
var mva = cameraMatrix[0];
@@ -24,9 +24,13 @@ var CameraToScreen = function (pointIn, pointOut)
2424
var imd = mva * determinant;
2525
var ime = (mvc * mvf - mvd * mve) * determinant;
2626
var imf = (mvb * mve - mva * mvf) * determinant;
27-
28-
var x = pointIn.x;
29-
var y = pointIn.y;
27+
var c = Math.cos(this.rotation);
28+
var s = Math.sin(this.rotation);
29+
var zoom = this.zoom;
30+
var scrollX = this.scrollX;
31+
var scrollY = this.scrollY;
32+
var x = pointIn.x + ((scrollX * c - scrollY * s) * zoom);
33+
var y = pointIn.y + ((scrollX * s + scrollY * c) * zoom);
3034

3135
if (!pointOut)
3236
{
@@ -40,4 +44,4 @@ var CameraToScreen = function (pointIn, pointOut)
4044
return pointOut;
4145
};
4246

43-
module.exports = CameraToScreen;
47+
module.exports = CameraToWorld;

v3/src/camera/2d/inc/ScreenToCamera.js

Lines changed: 0 additions & 12 deletions
This file was deleted.
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
var TransformMatrix = require('../../../gameobjects/components/TransformMatrix');
2+
var matrix0 = new TransformMatrix(1, 0, 0, 1, 0, 0);
3+
var matrix1 = new TransformMatrix(1, 0, 0, 1, 0, 0);
4+
var WorldToCamera = function (pointIn, pointOut)
5+
{
6+
if (!pointOut)
7+
{
8+
pointOut = { x: pointIn.x, y: pointIn.y };
9+
}
10+
11+
var cameraMatrix = this.matrix.matrix;
12+
var mva = cameraMatrix[0];
13+
var mvb = cameraMatrix[1];
14+
var mvc = cameraMatrix[2];
15+
var mvd = cameraMatrix[3];
16+
var mve = cameraMatrix[4];
17+
var mvf = cameraMatrix[5];
18+
19+
/* First Invert Matrix */
20+
var determinant = (mva * mvd) - (mvb * mvc);
21+
22+
if (!determinant)
23+
{
24+
return pointIn;
25+
}
26+
27+
determinant = 1 / determinant;
28+
29+
var ima = mvd * determinant;
30+
var imb = -mvb * determinant;
31+
var imc = -mvc * determinant;
32+
var imd = mva * determinant;
33+
var ime = (mvc * mvf - mvd * mve) * determinant;
34+
var imf = (mvb * mve - mva * mvf) * determinant;
35+
36+
matrix0.matrix[0] = ima;
37+
matrix0.matrix[1] = imb;
38+
matrix0.matrix[2] = imc;
39+
matrix0.matrix[3] = imd;
40+
matrix0.matrix[4] = ime;
41+
matrix0.matrix[5] = imf;
42+
43+
//var c = Math.cos(this.rotation);
44+
//var s = Math.sin(this.rotation);
45+
var zoom = this.zoom;
46+
var scrollX = this.scrollX;
47+
var scrollY = this.scrollY;
48+
var x = pointIn.x;// + scrollX * zoom;
49+
var y = pointIn.y;// + scrollY * zoom;
50+
51+
//var x = pointIn.x - ((scrollX * c - scrollY * s) * zoom);
52+
//var y = pointIn.y - ((scrollX * s + scrollY * c) * zoom);
53+
54+
matrix1.applyITRS(scrollX, scrollY, 0.0, zoom, zoom);
55+
//matrix1.invert();
56+
//matrix0.invert();
57+
58+
matrix0.multiply(matrix1);
59+
60+
pointOut = matrix0.transformPoint(x, y, pointOut);
61+
62+
return pointOut;
63+
};
64+
65+
module.exports = WorldToCamera;

v3/src/gameobjects/components/TransformMatrix.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,10 @@ var TransformMatrix = new Class({
6868
return this.transform(radianCos, radianSin, -radianSin, radianCos, 0, 0);
6969
},
7070

71-
multiply: function (otherMatrix)
71+
multiply: function (lhs)
7272
{
7373
var matrix = this.matrix;
74+
var otherMatrix = lhs.matrix;
7475

7576
var a0 = matrix[0];
7677
var b0 = matrix[1];

v3/src/gameobjects/graphics/GraphicsWebGLRenderer.js

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -221,8 +221,8 @@ var GraphicsWebGLRenderer = function (renderer, gameObject, interpolationPercent
221221
/* Graphics Game Object Properties */
222222
srcX, srcY, srcScaleX, srcScaleY, srcRotation,
223223
/* Rectangle properties */
224-
commandBuffer[cmdIndex + 1] - cameraScrollX,
225-
commandBuffer[cmdIndex + 2] - cameraScrollY,
224+
commandBuffer[cmdIndex + 1],
225+
commandBuffer[cmdIndex + 2],
226226
commandBuffer[cmdIndex + 3],
227227
commandBuffer[cmdIndex + 4],
228228
fillColor,
@@ -241,12 +241,12 @@ var GraphicsWebGLRenderer = function (renderer, gameObject, interpolationPercent
241241
/* Graphics Game Object Properties */
242242
srcX, srcY, srcScaleX, srcScaleY, srcRotation,
243243
/* Triangle properties */
244-
commandBuffer[cmdIndex + 1] - cameraScrollX,
245-
commandBuffer[cmdIndex + 2] - cameraScrollY,
246-
commandBuffer[cmdIndex + 3] - cameraScrollX,
247-
commandBuffer[cmdIndex + 4] - cameraScrollY,
248-
commandBuffer[cmdIndex + 5] - cameraScrollX,
249-
commandBuffer[cmdIndex + 6] - cameraScrollY,
244+
commandBuffer[cmdIndex + 1],
245+
commandBuffer[cmdIndex + 2],
246+
commandBuffer[cmdIndex + 3],
247+
commandBuffer[cmdIndex + 4],
248+
commandBuffer[cmdIndex + 5],
249+
commandBuffer[cmdIndex + 6],
250250
fillColor,
251251
fillAlpha,
252252
/* Transform */
@@ -263,12 +263,12 @@ var GraphicsWebGLRenderer = function (renderer, gameObject, interpolationPercent
263263
/* Graphics Game Object Properties */
264264
srcX, srcY, srcScaleX, srcScaleY, srcRotation,
265265
/* Triangle properties */
266-
commandBuffer[cmdIndex + 1] - cameraScrollX,
267-
commandBuffer[cmdIndex + 2] - cameraScrollY,
268-
commandBuffer[cmdIndex + 3] - cameraScrollX,
269-
commandBuffer[cmdIndex + 4] - cameraScrollY,
270-
commandBuffer[cmdIndex + 5] - cameraScrollX,
271-
commandBuffer[cmdIndex + 6] - cameraScrollY,
266+
commandBuffer[cmdIndex + 1],
267+
commandBuffer[cmdIndex + 2],
268+
commandBuffer[cmdIndex + 3],
269+
commandBuffer[cmdIndex + 4],
270+
commandBuffer[cmdIndex + 5],
271+
commandBuffer[cmdIndex + 6],
272272
lineWidth,
273273
lineColor,
274274
lineAlpha,

v3/src/input/global/inc/HitTest.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ var HitTest = function (tempMatrix, x, y, gameObjects, camera, output)
1717
return output;
1818
}
1919

20-
var screenPoint = camera.cameraToScreen({ x: x, y: y });
20+
var screenPoint = camera.cameraToWorld({ x: x, y: y });
2121
var culledGameObjects = camera.cull(gameObjects);
2222

2323
for (var i = 0; i < culledGameObjects.length; i++)

0 commit comments

Comments
 (0)