2013-04-05 6 views
21

क्या OrbitControls.js पर सीमा निर्धारित करने का कोई तरीका है? कल्पना कीजिए कि मैं जमीन से ऊपर कुछ बना रहा हूं, मैं कैमरे को जमीन से नीचे नहीं जाना चाहूंगा, मुझे पता है कि मेरा क्या मतलब है ?! ज़ूम इन और ज़ूम आउट करने के लिए वही चीज़ें जाती हैं। क्या इसे सीमित करने के लिए कुछ चर सेट करने का कोई तरीका है? क्योंकि मैं नहीं चाहता कि कैमरा बंद हो या बहुत दूर हो।मैं OrbitControl पर सीमा कैसे लगा सकता हूं - Three.js

बहुत बहुत धन्यवाद। =)

उत्तर

44

OrbitControls source

ज़ूम/में

this.minDistance = 0; 
this.maxDistance = Infinity; 

बाहर ज़ूम कहाँ रोटेशन को रोकने के लिए:

this.minPolarAngle = 0; // radians 
this.maxPolarAngle = Math.PI; // radians 

जमीन के नीचे जाने के लिए मत

controls.maxPolarAngle = Math.PI/2; 
+7

क्षैतिज घूर्णन को सीमित करने का एक तरीका भी है? – BuildingJarl

+3

ये, देखें [यह उत्तर] (http://stackoverflow.com/questions/25308943/limit-orbitcontrols-horizontal-rotation/25311658#25311658) – igneosaur

1

बस मामले में ओमेन को ग्राउंड ऊंचाई और कैमरा लक्ष्य समायोजन के साथ एक और अधिक मजबूत उत्तर की आवश्यकता है:

आपको नियंत्रण लक्ष्य और कैमरे की ग्राउंड स्थिति (ऊंचाई के बावजूद) के कोण के कोण को कोण मिलता है और maxPolarAngle असाइन करता है। अपने अप अक्ष के लिए समायोजित करें, मेरा था वाई। नियंत्रण परिवर्तन के अंदर घटना:

var centerPosition = controls.target.clone(); 
centerPosition.y = 0; 
var groundPosition = camera.position.clone(); 
groundPosition.y = 0; 
var d = (centerPosition.distanceTo(groundPosition)); 

var origin = new THREE.Vector2(controls.target.y,0); 
var remote = new THREE.Vector2(0,d); // replace 0 with raycasted ground altitude 
var angleRadians = Math.atan2(remote.y - origin.y, remote.x - origin.x); 
controls.maxPolarAngle = angleRadians; 
+0

यह काम करता है लेकिन यह नियंत्रण कक्षा (ऊपर और नीचे) को लॉक कर देगा यदि आप जमीन ऊंचाई के नीचे कक्षा लक्ष्य पैन। और कक्षा लक्ष्य को फिर से स्थानांतरित करने का कोई तरीका नहीं है। – zwcloud

+0

क्या आप एक कोडेन या जेएसफ़िल्ड बना सकते हैं? मुझे हल करने में मदद करने में खुशी होगी। @zwcloud – Radio

संबंधित मुद्दे

 संबंधित मुद्दे