diff options
| author | Ruben Beltran del Rio <git@r.bdr.sh> | 2024-05-07 22:37:27 +0200 |
|---|---|---|
| committer | Ruben Beltran del Rio <git@r.bdr.sh> | 2024-05-07 22:37:27 +0200 |
| commit | 362f91160b243453578633e3f9af67ce40179d8c (patch) | |
| tree | a9ee95e2f8a9c59189ea904ce87bfe54ed5be107 /lib/systems/camera_rotator.js | |
| parent | 5f6ef99eae91f53239f08143cead1249893fef81 (diff) | |
Make 3D
Diffstat (limited to 'lib/systems/camera_rotator.js')
| -rw-r--r-- | lib/systems/camera_rotator.js | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/systems/camera_rotator.js b/lib/systems/camera_rotator.js new file mode 100644 index 0000000..3520f71 --- /dev/null +++ b/lib/systems/camera_rotator.js @@ -0,0 +1,49 @@ +import { mat4, vec3 } from 'gl-matrix'; +import { System } from '@serpentity/serpentity'; +import Cameras from '../nodes/cameras'; + +export default class CameraRotator extends System { + + constructor() { + + super(); + } + + added(engine){ + + this.cameras = engine.getNodes(Cameras); + } + + removed(){ + + delete this.cameras; + } + + update(dt){ + + for (const camera of this.cameras) { + + let rotationMatrix = mat4.create(); + mat4.rotateY(rotationMatrix, rotationMatrix, camera.angle.yaw); + mat4.rotateX(rotationMatrix, rotationMatrix, camera.angle.pitch); + mat4.rotateZ(rotationMatrix, rotationMatrix, camera.angle.roll); + + let eye = vec3.fromValues(0, 0, camera.radius.radius); + vec3.transformMat4(eye, eye, rotationMatrix); + + camera.position.x = eye[0]; + camera.position.y = eye[1]; + camera.position.z = eye[2]; + + let up = vec3.fromValues(0, 1, 0); + vec3.transformMat4(up, up, rotationMatrix); + camera.up.x = up[0]; + camera.up.y = up[1]; + camera.up.z = up[2]; + + camera.angle.pitch = (camera.angle.pitch + camera.velocity.x * dt / 100 + 2 * Math.PI) % (2 * Math.PI); + camera.angle.yaw = (camera.angle.yaw + camera.velocity.y * dt / 100 + 2 * Math.PI) % (2 * Math.PI); + camera.angle.roll = (camera.angle.roll + camera.velocity.z * dt / 100 + 2 * Math.PI) % (2 * Math.PI); + } + } +}; |