pitch gefixt
This commit is contained in:
49
main.js
49
main.js
@@ -106,77 +106,46 @@ function syncCamera() {
|
||||
// -----------------------------------------
|
||||
// Abstand abhängig vom Zoom
|
||||
// -----------------------------------------
|
||||
|
||||
const earthCircumference = 40075016.686;
|
||||
|
||||
const metersPerPixel =
|
||||
earthCircumference *
|
||||
Math.cos(center.lat * Math.PI / 180) /
|
||||
Math.pow(2, zoom + 8);
|
||||
|
||||
const distance =
|
||||
metersPerPixel * map.getCanvas().height;
|
||||
const metersPerPixel = earthCircumference * Math.cos(center.lat * Math.PI / 180) / Math.pow(2, zoom + 8);
|
||||
const distance = metersPerPixel * map.getCanvas().height;
|
||||
|
||||
// -----------------------------------------
|
||||
// Zielpunkt = Kartenzentrum
|
||||
// -----------------------------------------
|
||||
|
||||
const target = new THREE.Vector3(
|
||||
x,
|
||||
y,
|
||||
0
|
||||
);
|
||||
const target = new THREE.Vector3(x, y, 0);
|
||||
|
||||
// -----------------------------------------
|
||||
// Kameraoffset
|
||||
// -----------------------------------------
|
||||
|
||||
const offset = new THREE.Vector3(
|
||||
0,
|
||||
-distance * Math.cos(pitch),
|
||||
distance * Math.sin(pitch)
|
||||
const offset = new THREE.Vector3(0, -distance * Math.sin(pitch), distance * Math.cos(pitch)
|
||||
);
|
||||
|
||||
// Bearing rotieren
|
||||
offset.applyAxisAngle(
|
||||
new THREE.Vector3(0, 0, 1),
|
||||
-bearing
|
||||
);
|
||||
offset.applyAxisAngle(new THREE.Vector3(0, 0, 1), -bearing);
|
||||
|
||||
// -----------------------------------------
|
||||
// Kameraposition
|
||||
// -----------------------------------------
|
||||
|
||||
const cameraPosition =
|
||||
target.clone().add(offset);
|
||||
const cameraPosition = target.clone().add(offset);
|
||||
|
||||
// -----------------------------------------
|
||||
// Potree Kamera setzen
|
||||
// -----------------------------------------
|
||||
|
||||
const camera =
|
||||
viewer.scene.getActiveCamera();
|
||||
|
||||
const camera = viewer.scene.getActiveCamera();
|
||||
camera.position.copy(cameraPosition);
|
||||
|
||||
camera.lookAt(target);
|
||||
|
||||
viewer.scene.view.position.copy(cameraPosition);
|
||||
|
||||
viewer.scene.view.lookAt(target);
|
||||
|
||||
camera.updateMatrixWorld();
|
||||
|
||||
viewer.renderer.render(
|
||||
viewer.scene.scene,
|
||||
camera
|
||||
);
|
||||
}
|
||||
|
||||
map.on('move', ()=>{
|
||||
console.log(viewer.scene.view)
|
||||
syncCamera();
|
||||
});
|
||||
// Kameras bei jeder Kartenbewegung synchronisieren
|
||||
map.on('move', syncCamera);
|
||||
map.on('zoom', syncCamera);
|
||||
map.on('pitch', syncCamera);
|
||||
map.on('rotate', syncCamera);
|
||||
|
||||
8
package-lock.json
generated
8
package-lock.json
generated
@@ -14,7 +14,7 @@
|
||||
"deck.gl": "^9.3.1",
|
||||
"maplibre-gl": "^5.22.0",
|
||||
"proj4": "^2.20.8",
|
||||
"three": "^0.184.0",
|
||||
"three": "^0.124.0",
|
||||
"vite": "^8.0.7"
|
||||
}
|
||||
},
|
||||
@@ -4916,9 +4916,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/three": {
|
||||
"version": "0.184.0",
|
||||
"resolved": "https://registry.npmjs.org/three/-/three-0.184.0.tgz",
|
||||
"integrity": "sha512-wtTRjG92pM5eUg/KuUnHsqSAlPM296brTOcLgMRqEeylYTh/CdtvKUvCyyCQTzFuStieWxvZb8mVTMvdPyUpxg==",
|
||||
"version": "0.124.0",
|
||||
"resolved": "https://registry.npmjs.org/three/-/three-0.124.0.tgz",
|
||||
"integrity": "sha512-ROXp1Ly7YyF+jC910DQyAWj++Qlw2lQv0qwYLNQwdDbjk4bsOXAfGO92wYTMPNei1GMJUmCxSxc3MjGBTS09Rg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/timezone-groups": {
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"deck.gl": "^9.3.1",
|
||||
"maplibre-gl": "^5.22.0",
|
||||
"proj4": "^2.20.8",
|
||||
"three": "^0.184.0",
|
||||
"three": "^0.124.0",
|
||||
"vite": "^8.0.7"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user