xxxxxxxxxx
/*
trackball type camera controls without libraries or quaternions
uses two matrices instead
this is the processingjs version
p5js version here: https://www.openprocessing.org/sketch/550998
*/
PMatrix3D acc, delta;
PVector camEye, camUp, camPitch;
PVector eye, up;
float sensitivity = 0.1;
// boolean pointerLock;
// float dx, dy;
// document.addEventListener('pointerlockchange', function(){pointerLock = !pointerLock;}, false);
// document.addEventListener("mousemove", function(e){dx = e.movementX; dy = e.movementY; moved();}, false);
int ww = (int) window.innerWidth;
int hh = (int) window.innerHeight;
void setup() {
size(ww, hh, P3D);
noFill();
stroke(255);
acc = new PMatrix3D();
delta = new PMatrix3D();
camEye = new PVector(0, 0, 500);
eye = camEye.get();
camUp = new PVector(0, 1, 0);
up = camUp.get();
camPitch = new PVector(1, 0, 0);
}
// void mouseClicked() {
// if(pointerLock) {
// document.exitPointerLock();
// } else {
// document.getElementById("pjs").requestPointerLock();
// }
// }
// void moved() {
// if(!pointerLock) return;
// float xx = dx * sensitivity;
// float yy = dy * sensitivity;
// eye = acc.mult(camEye.get(), null);
// up = acc.mult(camUp.get(), null);
// PVector pitch = acc.mult(camPitch.get(), null);
// delta.rotate(xx*sensitivity, up.x, up.y, up.z);
// delta.rotate(yy*sensitivity, pitch.x, pitch.y, pitch.z);
// acc.preApply(delta);
// delta.reset();
// }
void mouseDragged() {
float xx = (pmouseX - mouseX) * sensitivity;
float yy = (pmouseY - mouseY) * sensitivity;
eye = acc.mult(camEye.get(), null);
up = acc.mult(camUp.get(), null);
PVector pitch = acc.mult(camPitch.get(), null);
delta.rotate(xx*sensitivity, up.x, up.y, up.z);
delta.rotate(-yy*sensitivity, pitch.x, pitch.y, pitch.z);
acc.preApply(delta);
delta.reset();
}
void draw() {
// if(frameCount%60==0)console.log(frameRate);
background(0);
camera(
eye.x, eye.y, eye.z,
0, 0, 0,
up.x, up.y, up.z
);
box(100);
translate(110, 0, 0);
box(100);
translate(-110, -110, 0);
box(100);
}