यह चलती/के लिए एक अच्छा प्रारंभिक बिंदु के रूप में काम कर सकते हैं घूर्णन/माउस/ट्रैकपैड (टाइपस्क्रिप्ट में) के साथ कैमरा ज़ूम करना:
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()
})
}
}
की तरह में छोड़:
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))
})
नियंत्रण:
- चाल जबकि [ट्रैकपैड पर माउस छोड़ दिया/एकल उंगली पकड़] x/y विमान में कैमरा ले जाने के लिए
- कदम [ माउस व्हील/ट्रैकपैड] पर दो उंगलियों
- पकड़ shift + [माउस व्हील/दो फाई z-दिशा में ऊपर/नीचे स्थानांतरित करने के लिए ट्रैकपैड पर] ngers बढ़ती/घटते क्षेत्र के देखने
- चाल जबकि [माउस ट्रैकपैड पर सही/दो उंगलियों] पकड़े कैमरा बारी बारी से करने के लिए (चार का समुदाय)
इसके अतिरिक्त के माध्यम से/बाहर ज़ूम करने के लिए :
यदि आप फील्ड-ऑफ-व्यू को बदलने के बजाय 'दूरी' (yz के साथ) को बदलकर ज़ूम करना चाहते हैं तो आप स्थिति की वाई और जेड के अनुपात को रखते हुए कैमरे की स्थिति y और z को ऊपर/नीचे टक्कर दे सकते हैं जैसे:
// 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)
सुनिश्चित करें कि आप ईवेंट श्रोताओं को जोड़ दें। स्रोत में, वे इस तरह दिखते हैं: document.addEventListener ('mousemove', onDocumentMouseMove, false); – meetar
यह विफल रहता है, जबकि ओर्थोग्रफिक ट्रैकबॉल के लिए के रूप में ही कर controls.Please मुझे ओर्थोग्रफिक कैमरे का उपयोग कर ओर्थोग्रफिक ट्रैकबॉल नियंत्रण के साथ ऐसा करने में मदद। –
आपने स्रोत कोड का उल्लेख किया है लेकिन मुझे यह प्रतीत नहीं होता है। जब मैंने क्रोम देव टूल्स में लिंक किए गए ऐप द्वारा अनुरोध की गई जेएस फाइलों को देखा, तो मुझे आपके द्वारा ऊपर पोस्ट किया गया कोड नहीं दिखाई देता है। आप स्रोत से लिंक या आप इसे कैसे कृपया पाया व्याख्या कर सकते हैं? मैं ज्यादातर कलाकृतियां जहां/कैसे isMouseDown और प्रोजेक्टर चर अपने कोड स्निपेट संदर्भ में परिभाषित कर रहे हूँ। धन्यवाद! – Casey