|
@@ -2860,14 +2860,27 @@
|
|
|
result.m[1] = result.m[2] = result.m[3] = 0;
|
|
|
result.m[5] = 2.0 / (top - bottom);
|
|
|
result.m[4] = result.m[6] = result.m[7] = 0;
|
|
|
- result.m[10] = -1.0 / (znear - zfar);
|
|
|
+ result.m[10] = 1.0 / (zfar - znear);
|
|
|
result.m[8] = result.m[9] = result.m[11] = 0;
|
|
|
result.m[12] = (left + right) / (left - right);
|
|
|
result.m[13] = (top + bottom) / (bottom - top);
|
|
|
- result.m[14] = znear / (znear - zfar);
|
|
|
+ result.m[14] = -znear / (zfar - znear);
|
|
|
result.m[15] = 1.0;
|
|
|
}
|
|
|
|
|
|
+ public static OrthoOffCenterRH(left: number, right: number, bottom: number, top: number, znear: number, zfar: number): Matrix {
|
|
|
+ var matrix = Matrix.Zero();
|
|
|
+
|
|
|
+ Matrix.OrthoOffCenterRHToRef(left, right, bottom, top, znear, zfar, matrix);
|
|
|
+
|
|
|
+ return matrix;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static OrthoOffCenterRHToRef(left: number, right, bottom: number, top: number, znear: number, zfar: number, result: Matrix): void {
|
|
|
+ Matrix.OrthoOffCenterLHToRef(left, right, bottom, top, znear, zfar, result);
|
|
|
+ result.m[10] *= -1.0;
|
|
|
+ }
|
|
|
+
|
|
|
public static PerspectiveLH(width: number, height: number, znear: number, zfar: number): Matrix {
|
|
|
var matrix = Matrix.Zero();
|
|
|
|
|
@@ -2913,13 +2926,48 @@
|
|
|
|
|
|
result.m[4] = result.m[6] = result.m[7] = 0.0;
|
|
|
result.m[8] = result.m[9] = 0.0;
|
|
|
- result.m[10] = -zfar / (znear - zfar);
|
|
|
+ result.m[10] = zfar / (zfar - znear);
|
|
|
result.m[11] = 1.0;
|
|
|
result.m[12] = result.m[13] = result.m[15] = 0.0;
|
|
|
+ result.m[14] = -(znear * zfar) / (zfar - znear);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static PerspectiveFovRH(fov: number, aspect: number, znear: number, zfar: number): Matrix {
|
|
|
+ var matrix = Matrix.Zero();
|
|
|
+
|
|
|
+ Matrix.PerspectiveFovRHToRef(fov, aspect, znear, zfar, matrix);
|
|
|
+
|
|
|
+ return matrix;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static PerspectiveFovRHToRef(fov: number, aspect: number, znear: number, zfar: number, result: Matrix, isVerticalFovFixed = true): void {
|
|
|
+ var tan = 1.0 / (Math.tan(fov * 0.5));
|
|
|
+
|
|
|
+ if (isVerticalFovFixed) {
|
|
|
+ result.m[0] = tan / aspect;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ result.m[0] = tan;
|
|
|
+ }
|
|
|
+
|
|
|
+ result.m[1] = result.m[2] = result.m[3] = 0.0;
|
|
|
+
|
|
|
+ if (isVerticalFovFixed) {
|
|
|
+ result.m[5] = tan;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ result.m[5] = tan * aspect;
|
|
|
+ }
|
|
|
+
|
|
|
+ result.m[4] = result.m[6] = result.m[7] = 0.0;
|
|
|
+ result.m[8] = result.m[9] = 0.0;
|
|
|
+ result.m[10] = zfar / (znear - zfar);
|
|
|
+ result.m[11] = -1.0;
|
|
|
+ result.m[12] = result.m[13] = result.m[15] = 0.0;
|
|
|
result.m[14] = (znear * zfar) / (znear - zfar);
|
|
|
}
|
|
|
|
|
|
- public static PerspectiveFovWebVRToRef(fov, znear: number, zfar: number, result: Matrix, isVerticalFovFixed = true) {
|
|
|
+ public static PerspectiveFovWebVRToRef(fov, znear: number, zfar: number, result: Matrix, isVerticalFovFixed = true): void {
|
|
|
var upTan = Math.tan(fov.upDegrees * Math.PI / 180.0);
|
|
|
var downTan = Math.tan(fov.downDegrees * Math.PI / 180.0);
|
|
|
var leftTan = Math.tan(fov.leftDegrees * Math.PI / 180.0);
|