@@ -14,7 +14,11 @@ package away3d.cameras.lenses
14
14
private var _focalLengthInv : Number ;
15
15
private var _yMax : Number ;
16
16
private var _xMax : Number ;
17
+ private var _coordinateSystem : int ;
17
18
19
+ public static const COORDINATE_SYSTEM_LEFT_HANDED : int = 1 ;
20
+ public static const COORDINATE_SYSTEM_RIGHT_HANDED : int = - 1 ;
21
+
18
22
/**
19
23
* Creates a new PerspectiveLens object.
20
24
*
@@ -23,6 +27,7 @@ package away3d.cameras.lenses
23
27
public function PerspectiveLens (fieldOfView :Number = 60 )
24
28
{
25
29
super ();
30
+ this . coordinateSystem = COORDINATE_SYSTEM_LEFT_HANDED ;
26
31
this . fieldOfView = fieldOfView;
27
32
}
28
33
@@ -102,9 +107,26 @@ package away3d.cameras.lenses
102
107
clone . _near = _near ;
103
108
clone . _far = _far ;
104
109
clone . _aspectRatio = _aspectRatio ;
110
+ clone . _coordinateSystem = _coordinateSystem ;
105
111
return clone ;
106
112
}
107
113
114
+ /**
115
+ * The handedness of the coordinate system projection.
116
+ * The default is COORDINATE_SYSTEM_LEFT_HANDED.
117
+ */
118
+ public function get coordinateSystem ():int
119
+ {
120
+ return _coordinateSystem ;
121
+ }
122
+
123
+ public function set coordinateSystem (value :int ):void
124
+ {
125
+ if (value == _coordinateSystem ) return ;
126
+ _coordinateSystem = value ;
127
+ invalidateMatrix();
128
+ }
129
+
108
130
/**
109
131
* @inheritDoc
110
132
*/
@@ -155,6 +177,12 @@ package away3d.cameras.lenses
155
177
raw[ uint (14 )] = - 2 * _far * _near / (_far - _near );
156
178
}
157
179
180
+ if (_coordinateSystem == COORDINATE_SYSTEM_RIGHT_HANDED )
181
+ {
182
+ // Switch projection transform from left to right handed.
183
+ raw[ uint (5 )] = - raw[ uint (5 )];
184
+ }
185
+
158
186
_matrix . copyRawDataFrom(raw);
159
187
160
188
var yMaxFar: Number = _far * _focalLengthInv ;
0 commit comments