Esto podría servir como un buen punto de partida para mover/girando/acercamiento de una cámara con mouse/trackpad (en mecanografía):
class CameraControl {
zoomMode: boolean = false
press: boolean = false
sensitivity: number = 0.02
constructor(renderer: Three.Renderer, public camera: Three.PerspectiveCamera, updateCallback:() => void){
renderer.domElement.addEventListener('mousemove', event => {
if(!this.press){ return }
if(event.button == 0){
camera.position.y -= event.movementY * this.sensitivity
camera.position.x -= event.movementX * this.sensitivity
} else if(event.button == 2){
camera.quaternion.y -= event.movementX * this.sensitivity/10
camera.quaternion.x -= event.movementY * this.sensitivity/10
}
updateCallback()
})
renderer.domElement.addEventListener('mousedown',() => { this.press = true })
renderer.domElement.addEventListener('mouseup',() => { this.press = false })
renderer.domElement.addEventListener('mouseleave',() => { this.press = false })
document.addEventListener('keydown', event => {
if(event.key == 'Shift'){
this.zoomMode = true
}
})
document.addEventListener('keyup', event => {
if(event.key == 'Shift'){
this.zoomMode = false
}
})
renderer.domElement.addEventListener('mousewheel', event => {
if(this.zoomMode){
camera.fov += event.wheelDelta * this.sensitivity
camera.updateProjectionMatrix()
} else {
camera.position.z += event.wheelDelta * this.sensitivity
}
updateCallback()
})
}
}
soltarlo en como:
this.cameraControl = new CameraControl(renderer, camera,() => {
// you might want to rerender on camera update if you are rerendering all the time
window.requestAnimationFrame(() => renderer.render(scene, camera))
})
Controles:
- movimiento mientras [sostiene el ratón hacia la izquierda/dedo sencillo en el trackpad] para mover la cámara en plano x/y
- movimiento [ rueda del mouse/dos dedos en el trackpad] para moverse hacia arriba/abajo en la dirección z
- mantener el shift + [la rueda del mouse/dos fi dedos sobre trackpad] para zoom in/out vía el aumento/disminución de campo de visión
- movimiento mientras sosteniendo [/ derecho del ratón dos dedos en trackpad] para girar la cámara (cuaternión)
Además :
Si desea acercar un poco cambiando la "distancia" (a lo largo de yz) en lugar de cambiar el campo de visión, puede subir/bajar la posición de la cámara yy manteniendo la relación de y y z de posición sin cambios como:
// in mousewheel event listener in zoom mode
const ratio = camera.position.y/camera.position.z
camera.position.y += (event.wheelDelta * this.sensitivity * ratio)
camera.position.z += (event.wheelDelta * this.sensitivity)
Asegúrese de agregar los detectores de eventos. En la fuente, se ven así: document.addEventListener ('mousemove', onDocumentMouseMove, false); – meetar
Se produce un error al hacer lo mismo que para el control de trackball ortográfico. Por favor, ayúdeme a hacer esto con controles ortográficos de trackball usando una cámara ortográfica. –
Has mencionado el código fuente, pero parece que no puedo encontrarlo. Cuando miré los archivos JS solicitados por la aplicación a la que se vinculó en las herramientas de desarrollo de Chrome, no veo el código que publicó anteriormente. ¿Puede vincular a la fuente o explicar cómo la encontró, por favor? Principalmente soy curioso donde/cómo las variables isMouseDown y proyector se definen sus referencias de fragmento de código. Gracias! – Casey