@@ -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