2013-05-09 3 views
8

मैं इस सामान में वास्तव में नया हूं। मैं एक साधारण 3 डी दृश्य बनाना चाहता हूं, जहां मैं पॉइंटर लॉक कंट्रोल्स के साथ उड़ सकता हूं, लेकिन मुझे कुछ प्रकार की फ्लैशलाइट भी चाहिए। तो स्पॉट लाइट कैमरे के समान दिशा को इंगित करना चाहिए।कैमरा स्पॉटलाइट उसी दिशा में कैमरा तीन.जेएस (फ्लैशलाइट)

मैंने कैमरे का पालन करने के लिए स्पॉटलाइट बनाया है लेकिन इसका लक्ष्य 0,0,0 तक सीमित है।

इसे प्राप्त करने का सबसे अच्छा तरीका क्या है?

धन्यवाद।

उत्तर

12

SpotLight लक्ष्य Object3D है, Vector3 नहीं।

scene.add(camera); 
camera.add(pointLight); 

आप अभी भी एक रोशनी का उपयोग करना चाहते हैं, तो कुछ इस तरह करते हैं:

spotlight.target = myObject; 

आपके मामले में सबसे अच्छा समाधान के बजाय एक PointLight उपयोग करें, और इस पद्धति का उपयोग है

scene.add(camera); 
camera.add(spotLight.target); 
spotLight.target.position.set(0, 0, -1); 
spotLight.position.copy(camera.position); // and reset spotlight position if camera moves 

आमतौर पर कैमरे को दृश्य के बच्चे के रूप में जोड़ा जाना आवश्यक नहीं है, लेकिन इस मामले में इसकी आवश्यकता होती है क्योंकि प्रकाश कैमरे के बच्चे के रूप में जोड़ा जाता है।

Three.js r.69

+0

हाँ, लेकिन प्वाइंटलाइट मुझे छाया नहीं देता है। क्या पॉइंटलाइट के साथ उन्हें रखने का कोई तरीका है? –

+0

सच है, पॉइंटलाइट छाया का समर्थन नहीं करते हैं। लेकिन अगर प्रकाश स्थित है, जहां कैमरा है, तो आप छाया को कास्टिंग नहीं कर सकते हैं, क्योंकि छाया कास्टिंग करने वाली वस्तुएं रास्ते में हैं। – WestLangley

+0

ठीक है शायद खराब उदाहरण - कार्य: मैं सर्वर के रूप में node.js द्वारा सिंक किए गए दृश्य में दो इकाइयां चाहता हूं, (मल्टीप्लेयर) और मैं परिभाषित दिशा को इंगित करते हुए प्रत्येक इकाई में फ्लैश लाइट रखना चाहता हूं। सॉकेट द्वारा ऐसी जानकारी भेजने का सबसे अच्छा तरीका क्या है? (जिस तरह से स्वीकार्य बटन है? :)) –

8

इस प्रकार मैं एक ही समस्या है जो मैं हल था:

flashlight = new THREE.SpotLight(0xffffff,4,40); 
camera.add(flashlight); 
flashlight.position.set(0,0,1); 
flashlight.target = camera; 

के बाद से एक विशेष कार्यक्रम के .target एक वस्तु (और एक स्थिति नहीं) मैंने पाया होने की जरूरत है यह कैमरे को कैमरे के पीछे सीधे पर फ्लैशलाइट डालने के लिए मानसिक रूप से आसान है, और उसके बाद कैमरे पर लक्षित करें। इस प्रकार प्रकाश कैमरे के माध्यम से चमकता है और इसके सामने चीजों को रोशनी देता है।

यह दृष्टिकोण ठीक है अगर आप फ्लैशलाइट प्रभाव के बाद हैं जहां फ्लैशलाइट छाती (शरीर के लिए केंद्रीय) के करीब होती है और एक तरफ नहीं जाती है।

+0

यह मेरे लिए धन्यवाद धन्यवाद! कुछ कामकाजी कोड खोजने की कोशिश कर रहे थे। क्या आपको पता है कि स्पॉटलाइट को कैमरे से इंटरेक्टिव स्वतंत्र बनाया जा सकता है? मैंने यहां एक प्रश्न पूछा है: http://stackoverflow.com/questions/17827292/add-interactivity-to-a-spotlight-in-three-js – Paul

2

WestLangley के समाधान से प्रेरित होकर ऊपर, मुझे पता चला है कि spotlight.target और सुर्खियों ही एक ही वस्तु के लिए बच्चों के रूप में जोड़ा जा सकता है, कि कैमरा या किसी अन्य वस्तु, एक कार या एक बंदूक की तरह है या नहीं। फिर वे मूल वस्तु के सापेक्ष स्थित होते हैं, ताकि स्थिति को एक ऑब्जेक्ट से दूसरे ऑब्जेक्ट में कॉपी करने की आवश्यकता न हो।

आप, उदाहरण के लिए, कुछ इस तरह कर सकता है:

scene.add(camera); 
camera.add(gun); 
gun.position.set(-30,-30,0); 
gun.add(spotlight); 
spotlight.position.set(0,0,30); 
gun.add(spotlight.target); 
spotlight.target.position.set(0,0,31); 

और अब बंदूक, डिफ़ॉल्ट रूप से, कैमरा का पालन करेंगे, और सुर्खियों बंदूक के साथ प्रकाश होगा। अगर बंदूक किसी कारण से घूमती है (बुलेट को हटाकर या जमीन पर या क्रॉलिंग), स्पॉटलाइट भी घूमता है। तीन सॉफ्टवेयर का एक अच्छा टुकड़ा है। :-)

यदि आप कैमरे पर स्पॉटलाइट संलग्न करते हैं और इसे कैमरे के समान दिशा में इंगित करते हैं और इसे केंद्र से दूर नहीं रखते हैं, तो प्रकाश शंकु लगातार परिपत्र दिखाई देगा। कई अनुप्रयोगों के लिए यह कूलर और अधिक यथार्थवादी दिखता है कि यह प्रक्षेपण में गतिशील रूप से आकार बदलता है।एक छोटा ऑफ़सेट वह सब कुछ लेता है (जैसे ऊपर मेरे उदाहरण में, हालांकि मैंने इसका परीक्षण नहीं किया है)।

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