Skip to content
This repository was archived by the owner on Feb 28, 2023. It is now read-only.
Maksim Nedoshev edited this page Mar 7, 2019 · 1 revision

How to use camera

Creation camera

let camera = new Bronze.Camera()

Readonly properties

rotationMatrix - only rotation camera matrix.
inversed - inversed camera matrix.

Camera basic methods

setFieldOfView(angle) - setting field of view for camera.
setPosition(x, y, z) - setting position for camera.
move(x, y, z) - setting moving camera.
setRotation(x, y, z) - setting rotation angels for camera. Methods takes three angles.
rotate(x, y, z) - rotate camera regarding current rotation.
setLookUp(x, y, angle) - makes the camera look at the coordinates and all transformation are relative of this point.
setControl(handler) - setting control function for moving camera.

Setting control

setControls(handler) methods takes a function which will execute on every engine update. This function should transform camera like you want. It is good to use with Controls object. Here an example:

let controls = new Bronze.Controls(engine)

camera.setControl(() => {
    // All coords
    // let xt = this.rotationMatrix[0] * x + this.rotationMatrix[1] * y + this.rotationMatrix[2] * z + this.rotationMatrix[3]
    // let yt = this.rotationMatrix[4] * x + this.rotationMatrix[5] * y + this.rotationMatrix[6] * z + this.rotationMatrix[7]
    // let zt = this.rotationMatrix[8] * x + this.rotationMatrix[9] * y + this.rotationMatrix[10] * z + this.rotationMatrix[11]
    if (controls.keys[87]) {
        if (controls.keys[16]) {
            camera.move(0, 10, 0) // Move up
        } else {
            // camera.move(camera.rotationMatrix[2] * -10, camera.rotationMatrix[6] * -10, camera.rotationMatrix[10] * -10)
            camera.move(camera.rotationMatrix[2] * -10, 0, camera.rotationMatrix[10] * -10) // Moving forward.
        }
    }
    if (controls.keys[83]) {
        if (controls.keys[16]) {
            camera.move(0, -10, 0) // Move down
        } else {
            // camera.move(camera.rotationMatrix[2] * 10, camera.rotationMatrix[6] * 10, camera.rotationMatrix[10] * 10)
            camera.move(camera.rotationMatrix[2] * 10, 0, camera.rotationMatrix[10] * 10) // Move back
        }
    }
    if (controls.keys[65]) {
        camera.move(camera.rotationMatrix[0] * -10, camera.rotationMatrix[4] * -10, camera.rotationMatrix[8] * -10) // Move left
    }
    if (controls.keys[68]) {
        camera.move(camera.rotationMatrix[0] * 10, camera.rotationMatrix[4] * 10, camera.rotationMatrix[8] * 10) // Move right
    }

    if (lastMousePosition == null) {
        lastMousePosition = {
            x: controls.mouse.x, 
            y: controls.mouse.y
        }
    }
    
    if (controls.mouse.buttons[2]) {
        if (engine.selectedObject != null) {
            const object = engine.selectedObject
            object.move((controls.mouse.x - lastMousePosition.x), -(controls.mouse.y - lastMousePosition.y), 0)
        }
    }

    if (controls.mouse.buttons[0]) {
        if (controls.keys[17]) {
            camera.rotate(0, 0, ((controls.mouse.y - lastMousePosition.y) / 10))
        } else {
            camera.rotate((controls.mouse.y - lastMousePosition.y) / 10, (controls.mouse.x - lastMousePosition.x) / 10, 0)
        }
    }
    lastMousePosition.x = controls.mouse.x
    lastMousePosition.y = controls.mouse.y
})

Clone this wiki locally