-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathcamera.js
More file actions
85 lines (71 loc) · 1.95 KB
/
camera.js
File metadata and controls
85 lines (71 loc) · 1.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
var center = new GLOW.Vector3(512, 512, -100);
var cameraDistance = 2000;
var cameraAzimuth = 0.25 * Math.PI;
var cameraAltitude = 0.25 * Math.PI;
var camera = new GLOW.Camera({
useTarget: true,
near: 10,
far: 3000
});
var initCamera = function () {
camera.up = new GLOW.Vector3(0, 0, 1);
camera.target = center;
updateCamera();
registerControls();
};
var updateCamera = function () {
camera.localMatrix.setPosition(
center.value[0] + cameraDistance * Math.cos(cameraAltitude) * Math.cos(cameraAzimuth),
center.value[1] + cameraDistance * Math.cos(cameraAltitude) * Math.sin(cameraAzimuth),
center.value[2] + cameraDistance * Math.sin(cameraAltitude)
);
camera.update();
};
var zoomCamera = function (delta) {
cameraDistance += delta;
if (cameraDistance < 10) cameraDistance = 10;
updateCamera();
};
var rotateCamera = function (deltaX, deltaY) {
cameraAzimuth += deltaX;
cameraAltitude += deltaY;
cameraAltitude = Math.min(cameraAltitude, Math.PI / 2 - 0.05);
updateCamera();
};
var moveCamera = function (deltaX, deltaY) {
center.value[0] += Math.cos(cameraAzimuth) * deltaX + Math.sin(cameraAzimuth) * deltaY;
center.value[1] += Math.sin(cameraAzimuth) * deltaX - Math.cos(cameraAzimuth) * deltaY;
console.log(center.value);
updateCamera();
};
registerControls = function () {
document.onmousewheel = function (event) {
zoomCamera( 10 * Math.sqrt(Math.abs(event.deltaY)) * (event.deltaY > 0 ? 1 : -1));
};
var rotating = false;
document.onmousedown = function () {
rotating = true;
};
document.onmouseup = function () {
rotating = false;
};
document.onmousemove = function (event) {
if (rotating) {
rotateCamera(-event.movementX/200, event.movementY/200);
}
};
document.onkeydown = function (e) {
if (e.keyCode == '38') {
moveCamera(-10, 0);
}
else if (e.keyCode == '40') {
moveCamera(10, 0);
}
else if (e.keyCode == '37') {
moveCamera(0, 10);
}
else if (e.keyCode == '39') {
moveCamera(0, -10);
}
};
};