最后平移就是12 、13 、14
透视投影
// 设置投影矩阵(透视投影)
setPerspectiveProjectionMatrix() {
let canvas = Renderer.instance.canvas;
const fovy = Math.PI / 3; // 45度
const tanHalfFovy = Math.tan(fovy / 2);
const aspect = canvas.width / canvas.height;
const near = 0.51;
const far = 1000.0;
const projectionMatrix = new Float32Array(16);
projectionMatrix[0] = 1.0 / (aspect * tanHalfFovy);
projectionMatrix[5] = 1.0 / tanHalfFovy;
projectionMatrix[10] = -(far + near) / (far - near);
projectionMatrix[11] = -1.0;
projectionMatrix[14] = -(2.0 * far * near) / (far - near);
projectionMatrix[15] = 0.0;
return projectionMatrix;
}
// 设置投影矩阵(正交投影)
setOrthographicProjectionMatrix() {
let canvas = Renderer.instance.canvas;
const left = -canvas.width / 2;
const right = canvas.width / 2;
const bottom = -canvas.height / 2;
const top = canvas.height / 2;
const near = 0.1;
const far = 100000.0;
const projectionMatrix = new Float32Array(16);
projectionMatrix[0] = 2.0 / (right - left);
projectionMatrix[5] = 2.0 / (top - bottom);
projectionMatrix[10] = -2.0 / (far - near);
projectionMatrix[12] = -(right + left) / (right - left);
projectionMatrix[13] = -(top + bottom) / (top - bottom);
projectionMatrix[14] = -(far + near) / (far - near);
projectionMatrix[15] = 1.0;
return projectionMatrix;
}