2009-08-27 10 views
12

इसलिए मैं वर्तमान में मजेदार के लिए ओपनजीएल (जॉगएल, अधिक विशेष रूप से) में कुछ एफपीएस गेम प्रोग्रामिंग पर काम कर रहा हूं और मैं जानना चाहता हूं कि एफपीएस जैसी कैमरा बनाने का अनुशंसित तरीका क्या होगा?एक एफपीएस कैमरा कैसे कार्यान्वित करेगा?

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

माउस को ले जाने पर, दिशा वेक्टर त्रिकोणमिति और मैट्रिस का उपयोग करके घुमाया जाएगा। सभी वैक्टर, निश्चित रूप से, आसान गति नियंत्रण के लिए सामान्यीकृत हैं।

क्या यह आम और/या अच्छा तरीका है या क्या कोई आसान/बेहतर तरीका है?

उत्तर

6

जिस तरह से I ने हमेशा यह देखा है कि यह दो कोण, यो और पिच का उपयोग कर रहा है। माउस आंदोलन के दो अक्ष इन कोणों में परिवर्तन के अनुरूप हैं।

आप गोलाकार-से-आयताकार समन्वय परिवर्तन के साथ आसानी से forward वेक्टर की गणना कर सकते हैं। (पिच = अक्षांश = φ, विचलन = देशांतर = θ)

आप एक निश्चित up वेक्टर उपयोग कर सकते हैं (जैसे कि (0,0,1)), लेकिन इसका मतलब यह है कि आप सीधे ऊपर की ओर या नीचे की ओर नहीं देख सकते हैं। (अधिकांश गेम आपको 89.9 99 डिग्री से अधिक नहीं दिखने की अनुमति देकर हल करते हैं।)

right वेक्टर आगे और ऊपर वैक्टरों का क्रॉस उत्पाद है। यह हमेशा ग्राउंड प्लेन के समानांतर होगा क्योंकि ऊपर वेक्टर जमीन के मैदान के लिए हमेशा लंबवत है।

बाएं/दाएं स्ट्रैफ़ कुंजी तब +/-right वेक्टर का उपयोग करें। ग्राउंड प्लेन के समानांतर forward वेक्टर के लिए, आप right और up वैक्टर का क्रॉस उत्पाद ले सकते हैं।

जीएल भाग के लिए, आप खिलाड़ी के मूल का उपयोग करके gluLookAt() का उपयोग कर सकते हैं, मूल प्लस forward वेक्टर और up वेक्टर।

ओह और कृपया, कृपया एक "उलटा माउस" विकल्प जोड़ें।

संपादित करें: Here की कोई वैकल्पिक समाधान जो 89.9 समस्या से छुटकारा मिलता है, एक और सवाल है, जो (कोई पिच जानकारी के साथ) पहले right वेक्टर निर्माण करना शामिल है और उसके बाद forward और up में पूछा।

4

हां, अनिवार्य रूप से जिस तरह से मैंने इसे हमेशा देखा है।

+0

ठीक है, धन्यवाद। बस यह सुनिश्चित करना चाहता था कि मुझे कुछ भी याद नहीं है। आपका दिन शुभ हो! –

1

हाँ, लेकिन अंत में आप कैमरे में कई अन्य विशेषताओं को जोड़ना चाहेंगे। इसे n00b वर्तनी करने के लिए: यदि आप क्वैक या सीएस की नकल करना चाहते हैं तो इसे साफ रखें। अंत में बॉबिंग, एफओवी, मोशन फ़िल्टरिंग, नेटवर्क अंतराल निलंबन और अधिक हो सकता है।

कैमरे वास्तव में एक अच्छे खेल में बनाने के लिए और अधिक कठिन भागों में से एक हैं। यही कारण है कि डेवलपर्स आमतौर पर गंभीरता से सुस्त, निश्चित 1/3 व्यक्ति व्यक्ति के साथ संतुष्ट होते हैं।

1

आप अपने कैमरे के घूर्णन के लिए Quaternions का उपयोग कर सकते हैं। हालांकि मैंने इसे स्वयं नहीं किया है, लेकिन वे gimbal lock से बचने के लिए उपयोगी हैं।

+1

एफपीएस में जिम्बल लॉक नहीं हो सकता है; वास्तव में माउस चाल के लिए यूलर कोण जोड़ना किसी भी जोखिम के बिना एक विशाल सरलीकरण है। –

+0

वास्तव में, ठीक है मुझे लगता है कि मुझे अपने 3 डी पर पढ़ना है। – crunchdog

+0

जोनास सही है, कम से कम 3 रोटेशन गठबंधन करते समय केवल जिम्बल लॉक का खतरा होता है। आपके द्वारा उद्धृत लेख केवल सादा गलत है। यदि आप यूलरियन ट्रांसफॉर्म का उपयोग करते हैं तो केवल मैट्रिस और क्वाटरनियंस के साथ कुछ जिम्बल लॉक हो सकता है। इसे ठीक करने के केवल दो तरीके हैं, ध्रुवों या गैर युलरियन पर एकवचन के लिए कुछ गैर रेखीय उपचार जो परिवर्तन के साथ आसान हैं ... quaternions :) – gouessej

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