import { Vec3 } from '../math/Vec3.js' import { Mat4 } from '../math/Mat4.js' export class Entity { static #id = 0 constructor(mesh) { this.mesh = mesh this.position = new Vec3() this.rotation = new Vec3() this.scale = new Vec3(1, 1, 1) this.id = Entity.#id Entity.#id++ } tran() { this.rotation.x %= 360; this.rotation.y %= 360; this.rotation.z %= 360; const tran = new Mat4().identity() const d = tran.data const c3 = Math.cos(this.rotation.z * (Math.PI / 180)) const s3 = Math.sin(this.rotation.z * (Math.PI / 180)) const c2 = Math.cos(this.rotation.x * (Math.PI / 180)) const s2 = Math.sin(this.rotation.x * (Math.PI / 180)) const c1 = Math.cos(this.rotation.y * (Math.PI / 180)) const s1 = Math.sin(this.rotation.y * (Math.PI / 180)) d[0] = this.scale.x * (c1 * c3 + s1 * s2 * s3); d[1] = this.scale.x * (c2 * s3) d[2] = this.scale.x * (c1 * s2 * s3 - c3 * s1) d[3] = 0 d[4] = this.scale.y * (c3 * s1 * s2 - c1 * s3) d[5] = this.scale.y * (c2 * c3) d[6] = this.scale.y * (c1 * c3 * s2 + s1 * s3) d[7] = 0 d[8] = this.scale.z * (c2 * s1) d[9] = this.scale.z * (-s2) d[10] = this.scale.z * (c1 * c2) d[11] = 0 d[12] = this.position.x d[13] = this.position.y d[14] = this.position.z d[15] = 1 return tran } }