Spaces:
Running
Running
Upload 85 files
Browse files- dist/controls/OrbitControls.d.ts +1 -2
- dist/index.js +0 -0
- dist/index.js.map +0 -0
- src/controls/OrbitControls.ts +7 -12
dist/controls/OrbitControls.d.ts
CHANGED
@@ -14,7 +14,6 @@ declare class OrbitControls {
|
|
14 |
setCameraTarget: (newTarget: Vector3) => void;
|
15 |
update: () => void;
|
16 |
dispose: () => void;
|
17 |
-
constructor(camera: Camera, canvas: HTMLElement, alpha?: number,
|
18 |
-
beta?: number, radius?: number, enableKeyboardControls?: boolean, inputTarget?: Vector3);
|
19 |
}
|
20 |
export { OrbitControls };
|
|
|
14 |
setCameraTarget: (newTarget: Vector3) => void;
|
15 |
update: () => void;
|
16 |
dispose: () => void;
|
17 |
+
constructor(camera: Camera, canvas: HTMLElement, alpha?: number, beta?: number, radius?: number, enableKeyboardControls?: boolean, inputTarget?: Vector3);
|
|
|
18 |
}
|
19 |
export { OrbitControls };
|
dist/index.js
CHANGED
The diff for this file is too large to render.
See raw diff
|
|
dist/index.js.map
CHANGED
The diff for this file is too large to render.
See raw diff
|
|
src/controls/OrbitControls.ts
CHANGED
@@ -23,26 +23,18 @@ class OrbitControls {
|
|
23 |
constructor(
|
24 |
camera: Camera,
|
25 |
canvas: HTMLElement,
|
26 |
-
alpha: number = 0.5,
|
27 |
beta: number = 0.5,
|
28 |
radius: number = 5,
|
29 |
enableKeyboardControls: boolean = true,
|
30 |
inputTarget: Vector3 = new Vector3(),
|
31 |
) {
|
32 |
-
// 'target' is the point the camera orbits around.
|
33 |
let target = inputTarget.clone();
|
34 |
|
35 |
-
// Instead of using the passed alpha, beta, radius values,
|
36 |
-
// compute them from the camera's initial position.
|
37 |
-
// (This assumes that the camera.position is already set
|
38 |
-
// to the desired initial position.)
|
39 |
-
const dx = target.x - camera.position.x;
|
40 |
-
const dy = target.y - camera.position.y;
|
41 |
-
const dz = target.z - camera.position.z;
|
42 |
-
let desiredRadius = Math.sqrt(dx * dx + dy * dy + dz * dz);
|
43 |
-
let desiredBeta = Math.atan2(dy, Math.sqrt(dx * dx + dz * dz));
|
44 |
-
let desiredAlpha = -Math.atan2(dx, dz);
|
45 |
let desiredTarget = target.clone();
|
|
|
|
|
|
|
46 |
|
47 |
let dragging = false;
|
48 |
let panning = false;
|
@@ -136,6 +128,7 @@ class OrbitControls {
|
|
136 |
} else {
|
137 |
desiredAlpha -= dx * this.orbitSpeed * 0.003;
|
138 |
desiredBeta += dy * this.orbitSpeed * 0.003;
|
|
|
139 |
desiredBeta = Math.min(
|
140 |
Math.max(desiredBeta, (this.minAngle * Math.PI) / 180),
|
141 |
(this.maxAngle * Math.PI) / 180,
|
@@ -209,6 +202,7 @@ class OrbitControls {
|
|
209 |
|
210 |
desiredAlpha -= dx * this.orbitSpeed * 0.003;
|
211 |
desiredBeta += dy * this.orbitSpeed * 0.003;
|
|
|
212 |
desiredBeta = Math.min(
|
213 |
Math.max(desiredBeta, (this.minAngle * Math.PI) / 180),
|
214 |
(this.maxAngle * Math.PI) / 180,
|
@@ -256,6 +250,7 @@ class OrbitControls {
|
|
256 |
// Horizontal (azimuth) rotation with 'e' and 'q'
|
257 |
if (keys["KeyE"]) desiredAlpha += rotateSpeed;
|
258 |
if (keys["KeyQ"]) desiredAlpha -= rotateSpeed;
|
|
|
259 |
desiredAlpha = Math.min(
|
260 |
Math.max(desiredAlpha, (this.minAzimuth * Math.PI) / 180),
|
261 |
(this.maxAzimuth * Math.PI) / 180
|
|
|
23 |
constructor(
|
24 |
camera: Camera,
|
25 |
canvas: HTMLElement,
|
26 |
+
alpha: number = 0.5,
|
27 |
beta: number = 0.5,
|
28 |
radius: number = 5,
|
29 |
enableKeyboardControls: boolean = true,
|
30 |
inputTarget: Vector3 = new Vector3(),
|
31 |
) {
|
|
|
32 |
let target = inputTarget.clone();
|
33 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
let desiredTarget = target.clone();
|
35 |
+
let desiredAlpha = alpha;
|
36 |
+
let desiredBeta = beta;
|
37 |
+
let desiredRadius = radius;
|
38 |
|
39 |
let dragging = false;
|
40 |
let panning = false;
|
|
|
128 |
} else {
|
129 |
desiredAlpha -= dx * this.orbitSpeed * 0.003;
|
130 |
desiredBeta += dy * this.orbitSpeed * 0.003;
|
131 |
+
// Clamp vertical angle (beta) only if limits are finite
|
132 |
desiredBeta = Math.min(
|
133 |
Math.max(desiredBeta, (this.minAngle * Math.PI) / 180),
|
134 |
(this.maxAngle * Math.PI) / 180,
|
|
|
202 |
|
203 |
desiredAlpha -= dx * this.orbitSpeed * 0.003;
|
204 |
desiredBeta += dy * this.orbitSpeed * 0.003;
|
205 |
+
// Clamp vertical (polar) angle (beta) if limits are finite
|
206 |
desiredBeta = Math.min(
|
207 |
Math.max(desiredBeta, (this.minAngle * Math.PI) / 180),
|
208 |
(this.maxAngle * Math.PI) / 180,
|
|
|
250 |
// Horizontal (azimuth) rotation with 'e' and 'q'
|
251 |
if (keys["KeyE"]) desiredAlpha += rotateSpeed;
|
252 |
if (keys["KeyQ"]) desiredAlpha -= rotateSpeed;
|
253 |
+
// Clamp horizontal angle (azimuth) only if limits are finite
|
254 |
desiredAlpha = Math.min(
|
255 |
Math.max(desiredAlpha, (this.minAzimuth * Math.PI) / 180),
|
256 |
(this.maxAzimuth * Math.PI) / 180
|