Przeglądaj źródła

Add options limiting hfov, pitch, and yaw (thanks PhobosK).

pull/14/head
Matthew Petroff 10 lat temu
rodzic
commit
532395a359
1 zmienionych plików z 52 dodań i 18 usunięć
  1. +52
    -18
      src/js/pannellum.js

+ 52
- 18
src/js/pannellum.js Wyświetl plik

@@ -48,8 +48,14 @@ var config,

var defaultConfig = {
hfov: 100,
minhfov: 50,
maxhfov: 120,
pitch: 0,
minpitch: -85,
maxpitch: 85,
yaw: 0,
minyaw: -360,
maxyaw: 360,
haov: 360,
vaov: 180,
voffset: 0,
@@ -196,9 +202,15 @@ function onDocumentMouseDown(event) {
function onDocumentMouseMove(event) {
if (isUserInteracting) {
//TODO: This still isn't quite right
config.yaw = ((Math.atan(onPointerDownPointerX / canvas.width * 2 - 1) - Math.atan(event.clientX / canvas.width * 2 - 1)) * 180 / Math.PI * config.hfov / 90) + onPointerDownYaw;
var yaw = ((Math.atan(onPointerDownPointerX / canvas.width * 2 - 1) - Math.atan(event.clientX / canvas.width * 2 - 1)) * 180 / Math.PI * config.hfov / 90) + onPointerDownYaw;
// Ensure the yaw is within min and max allowed
config.yaw = Math.max(config.minyaw, Math.min(config.maxyaw, yaw));
var vfov = 2 * Math.atan(Math.tan(config.hfov/360*Math.PI) * canvas.height / canvas.width) * 180 / Math.PI;
config.pitch = ((Math.atan(event.clientY / canvas.height * 2 - 1) - Math.atan(onPointerDownPointerY / canvas.height * 2 - 1)) * 180 / Math.PI * vfov / 90) + onPointerDownPitch;
var pitch = ((Math.atan(event.clientY / canvas.height * 2 - 1) - Math.atan(onPointerDownPointerY / canvas.height * 2 - 1)) * 180 / Math.PI * vfov / 90) + onPointerDownPitch;
// Ensure the calculated pitch is within min and max allowed
config.pitch = Math.max(config.minpitch, Math.min(config.maxpitch, pitch));
}
}

@@ -218,9 +230,15 @@ function onDocumentTouchStart(event) {
function onDocumentTouchMove(event) {
// Override default action
event.preventDefault();

var yaw = (onPointerDownPointerX - event.targetTouches[0].clientX) * 0.1 + onPointerDownYaw;
// Ensure the yaw is within min and max allowed
config.yaw = Math.max(config.minyaw, Math.min(config.maxyaw, yaw));
var pitch = (event.targetTouches[0].clientY - onPointerDownPointerY) * 0.1 + onPointerDownPitch;
// Ensure the calculated pitch is within min and max allowed
config.pitch = Math.max(config.minpitch, Math.min(config.maxpitch, pitch));
config.yaw = (onPointerDownPointerX - event.targetTouches[0].clientX) * 0.1 + onPointerDownYaw;
config.pitch = (event.targetTouches[0].clientY - onPointerDownPointerY) * 0.1 + onPointerDownPitch;
animate();
}

@@ -363,6 +381,9 @@ function keyRepeat() {
}
var diff = (newTime - prevTime) * config.hfov / 1700;
var pitch = config.pitch;
var yaw = config.yaw;
// If minus key is down
if (keysDown[0]) {
zoomOut(diff);
@@ -376,25 +397,37 @@ function keyRepeat() {
// If up arrow or "w" is down
if (keysDown[2] || keysDown[6]) {
// Pan up
config.pitch += diff;
pitch += diff;
// Ensure the calculated pitch is within min and max allowed
config.pitch = Math.max(config.minpitch, Math.min(config.maxpitch, pitch));
}
// If down arrow or "s" is down
if (keysDown[3] || keysDown[7]) {
// Pan down
config.pitch -= diff;
pitch -= diff;
// Ensure the calculated pitch is within min and max allowed
config.pitch = Math.max(config.minpitch, Math.min(config.maxpitch, pitch));
}
// If left arrow or "a" is down
if (keysDown[4] || keysDown[8]) {
// Pan left
config.yaw -= diff;
yaw -= diff;
// Ensure the yaw is within min and max allowed
config.yaw = Math.max(config.minyaw, Math.min(config.maxyaw, yaw));
}
// If right arrow or "d" is down
if (keysDown[5] || keysDown[9]) {
// Pan right
config.yaw += diff;
yaw += diff;
// Ensure the yaw is within min and max allowed
config.yaw = Math.max(config.minyaw, Math.min(config.maxyaw, yaw));
}
// If auto-rotate
@@ -438,7 +471,12 @@ function render() {
config.yaw += 360;
}
config.pitch = Math.max(-85, Math.min(85, config.pitch));
// Ensure the yaw is within min and max allowed
config.yaw = Math.max(config.minyaw, Math.min(config.maxyaw, config.yaw));
// Ensure the calculated pitch is within min and max allowed
config.pitch = Math.max(config.minpitch, Math.min(config.maxpitch, config.pitch));
renderer.render(config.pitch * Math.PI / 180, config.yaw * Math.PI / 180, config.hfov * Math.PI / 180);
renderHotSpots();
@@ -715,11 +753,7 @@ function processOptions() {
case 'pitch':
// Keep pitch within bounds
if (config.pitch < -85) {
config.pitch = -85;
} else if (config.pitch > 85) {
config.pitch = 85;
}
config.pitch = Math.max(config.minpitch, Math.min(config.maxpitch, config.pitch));
break;
case 'autoload':
@@ -818,13 +852,13 @@ function zoomOut(amount) {

function setHfov(i) {
// Keep field of view within bounds
if (i < 50 && config.type != 'multires') {
config.hfov = 50;
if (i < config.minhfov && config.type != 'multires') {
config.hfov = config.minhfov;
} else if (config.type == 'multires' && i < canvas.width
/ (config.multiRes.cubeResolution / 90 * 0.9)) {
config.hfov = canvas.width / (config.multiRes.cubeResolution / 90 * 0.9);
} else if (i > 120) {
config.hfov = 120;
} else if (i > config.maxhfov) {
config.hfov = config.maxhfov;
} else {
config.hfov = i;
}


Ładowanie…
Anuluj
Zapisz