nothing works
This commit is contained in:
+64
-4
@@ -1,6 +1,7 @@
|
||||
export function perspective(out: Float32Array, fov: number, aspect: number, near: number, far: number) {
|
||||
import { camera } from "./core.ts";
|
||||
|
||||
export function mat4_perspective(out: Float32Array, fov: number, aspect: number, near: number, far: number) {
|
||||
const f = 1 / Math.tan(fov / 2);
|
||||
const nf = 1 / (near - far);
|
||||
|
||||
out[0] = f / aspect;
|
||||
out[1] = 0;
|
||||
@@ -14,11 +15,70 @@ export function perspective(out: Float32Array, fov: number, aspect: number, near
|
||||
|
||||
out[8] = 0;
|
||||
out[9] = 0;
|
||||
out[10] = (far + near) * nf;
|
||||
out[10] = -(far + near) / (far - near);
|
||||
out[11] = -1;
|
||||
|
||||
out[12] = 0;
|
||||
out[13] = 0;
|
||||
out[14] = (2 * far * near) * nf;
|
||||
out[14] = -(2 * far * near) / (far - near);
|
||||
out[15] = 0;
|
||||
}
|
||||
|
||||
export function mat4_view(out: Float32Array) {
|
||||
const cx = camera.x;
|
||||
const cy = camera.y;
|
||||
const cz = camera.z;
|
||||
|
||||
const yaw = camera.yaw;
|
||||
const pitch = camera.pitch;
|
||||
|
||||
const cosY = Math.cos(yaw);
|
||||
const sinY = Math.sin(yaw);
|
||||
const cosP = Math.cos(pitch);
|
||||
const sinP = Math.sin(pitch);
|
||||
|
||||
const fx = cosP * sinY;
|
||||
const fy = sinP;
|
||||
const fz = cosP * cosY;
|
||||
|
||||
const rx = cosY;
|
||||
const rz = -sinY;
|
||||
|
||||
const ux = -sinP * sinY;
|
||||
const uy = cosP;
|
||||
const uz = -sinP * cosY;
|
||||
|
||||
out[0] = rx;
|
||||
out[1] = ux;
|
||||
out[2] = -fx;
|
||||
out[3] = 0;
|
||||
|
||||
out[4] = 0;
|
||||
out[5] = uy;
|
||||
out[6] = -fy;
|
||||
out[7] = 0;
|
||||
|
||||
out[8] = rz;
|
||||
out[9] = uz;
|
||||
out[10] = -fz;
|
||||
out[11] = 0;
|
||||
|
||||
out[12] = -(rx * cx + rz * cz);
|
||||
out[13] = -(ux * cx + uy * cy + uz * cz);
|
||||
out[14] = fx * cx + fy * cy + fz * cz;
|
||||
out[15] = 1;
|
||||
}
|
||||
|
||||
export function mat4_mul(out: Float32Array, a: Float32Array, b: Float32Array) {
|
||||
for (let i = 0; i < 4; i++) {
|
||||
const ai0 = a[i];
|
||||
const ai1 = a[i + 4];
|
||||
const ai2 = a[i + 8];
|
||||
const ai3 = a[i + 12];
|
||||
|
||||
out[i] = ai0 * b[0] + ai1 * b[1] + ai2 * b[2] + ai3 * b[3];
|
||||
out[i + 4] = ai0 * b[4] + ai1 * b[5] + ai2 * b[6] + ai3 * b[7];
|
||||
out[i + 8] = ai0 * b[8] + ai1 * b[9] + ai2 * b[10] + ai3 * b[11];
|
||||
out[i + 12] = ai0 * b[12] + ai1 * b[13] + ai2 * b[14] + ai3 * b[15];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user