Skip to content

Commit b88a3e9

Browse files
committed
Camera culling working with camera and game objects transforms
1 parent a3ee32c commit b88a3e9

1 file changed

Lines changed: 29 additions & 3 deletions

File tree

v3/src/camera/Camera.js

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,28 @@ var Camera = new Class({
6464
var cameraH = this.height;
6565
var culledObjects = this.culledObjects;
6666
var length = renderableObjects.length;
67+
var cameraMatrix = this.matrix.matrix;
68+
var mva = cameraMatrix[0];
69+
var mvb = cameraMatrix[1];
70+
var mvc = cameraMatrix[2];
71+
var mvd = cameraMatrix[3];
72+
var mve = cameraMatrix[4];
73+
var mvf = cameraMatrix[5];
74+
75+
/* First Invert Matrix */
76+
var determinant = (mva * mvd) - (mvb * mvc);
77+
78+
if (!determinant)
79+
return pointIn;
80+
81+
determinant = 1 / determinant;
82+
83+
var ima = mvd * determinant;
84+
var imb = -mvb * determinant;
85+
var imc = -mvc * determinant;
86+
var imd = mva * determinant;
87+
var ime = (mvc * mvf - mvd * mve) * determinant;
88+
var imf = (mvb * mve - mva * mvf) * determinant;
6789

6890
culledObjects.length = 0;
6991

@@ -78,11 +100,15 @@ var Camera = new Class({
78100
var objectH = object.height;
79101
var objectX = (object.x - (scrollX * object.scrollFactorX)) - (objectW * object.originX);
80102
var objectY = (object.y - (scrollY * object.scrollFactorY)) - (objectH * object.originY);
103+
var tx = (objectX * mva + objectY * mvc + mve);
104+
var ty = (objectX * mvb + objectY * mvd + mvf);
105+
var tw = ((objectX + objectW) * mva + (objectY + objectH) * mvc + mve);
106+
var th = ((objectX + objectW) * mvb + (objectY + objectH) * mvd + mvf);
81107
var cullW = cameraW + objectW;
82108
var cullH = cameraH + objectH;
83109

84-
if (objectX > -objectW && objectY > -objectH &&
85-
objectX < cullW && objectY < cullH)
110+
if (tx > -objectW || ty > -objectH || tx < cullW || ty < cullH ||
111+
tw > -objectW || th > -objectH || tw < cullW || th < cullH)
86112
{
87113
culledObjects.push(object);
88114
}
@@ -336,7 +362,7 @@ var Camera = new Class({
336362
{
337363
pointOut = {x: 0, y: 0};
338364
}
339-
365+
340366
/* Apply transform to point */
341367
pointOut.x = (x * ima + y * imc + ime);
342368
pointOut.y = (x * imb + y * imd + imf);

0 commit comments

Comments
 (0)