मैं एक 2D गेम लिख रहा हूँ जहाँ मेरे खेल की दुनिया में x अक्ष दाएं से बाएं चल रहा है, y अक्ष ऊपर से नीचे चल रहा है, और स्क्रीन से z अक्ष निकल रहा है:
जब भी मेरा खेल दुनिया ऊपर-नीचे होता है, खेल को थोड़ा झुकाव पर प्रस्तुत किया जाता है:
मैं विश्व अंतरिक्ष से स्क्रीन स्पेस, और इसके विपरीत प्रोजेक्ट करने पर काम कर रहा हूं। मेरे पास पूर्व कार्य निम्नानुसार हैं:
var viewport = new Viewport(0, 0, this.ScreenWidth, this.ScreenHeight);
var screenPoint = viewport.Project(worldPoint.NegateY(), this.ProjectionMatrix, this.ViewMatrix, this.WorldMatrix);
NegateY()
विस्तार विधि क्या है, की तरह लगता है के बाद से XNA का बिल्कुल वही करती y अक्ष ऊपर से नीचे के बजाय ऊपर से नीचे चलता है। ऊपर दिया गया स्क्रीनशॉट यह सब काम कर रहा है। मूल रूप से, मेरे पास 3 डी अंतरिक्ष में अंकों का एक गुच्छा है जिसे मैं स्क्रीन स्पेस में प्रस्तुत करता हूं। मैं वास्तविक समय में कैमरा गुणों को संशोधित कर सकता हूं और इसे नए स्थान पर चेतन कर सकता हूं। जाहिर है मेरा वास्तविक खेल अंक के बजाय स्प्राइट का उपयोग करेगा और कैमरे की स्थिति तय हो जाएगी, लेकिन मैं बस कोशिश कर रहा हूं कि इससे पहले कि सभी गणित मिल जाएं।
अब, मैं दूसरे तरीके से वापस बदलने की कोशिश कर रहा हूं। अर्थात्, ऊपर स्क्रीन स्थान में एक x और y बिंदु दिया गया है, जो विश्व अंतरिक्ष में संबंधित बिंदु निर्धारित करता है। इसलिए, यदि मैं कर्सर को इंगित करता हूं, तो, हरे रंग के ट्रेपोज़ॉइड के निचले-बाएं, मैं (0, 480) का विश्व अंतरिक्ष पढ़ना चाहता हूं। Z समन्वय अप्रासंगिक है। या, बल्कि, दुनिया के अंतरिक्ष में वापस मानचित्रण करते समय z समन्वय हमेशा शून्य रहेगा। अनिवार्य रूप से, मैं इस विधि हस्ताक्षर को लागू करना चाहता हूं:
public Vector2 ScreenPointToWorld(Vector2 point)
मैंने इस काम को पाने के लिए कई चीजों की कोशिश की है, लेकिन सिर्फ कुछ किस्मत नहीं है। मेरी नवीनतम सोच यह है कि मुझे Viewport.Unproject
निकट / दूर z मानों के साथ दो बार कॉल करने की आवश्यकता है , परिणाम की गणना करें Ray
, इसे सामान्य करें, फिर मूल रूप से मेरी दुनिया के जमीनी स्तर का प्रतिनिधित्व करने वाले के Ray
साथ अंतरंगता की गणना करें Plane
। हालांकि, मैं आखिरी कदम पर फंस गया और मुझे यकीन नहीं था कि मैं चीजों को जटिल कर रहा हूं।
क्या कोई मुझे सही दिशा में इंगित कर सकता है कि इसे कैसे प्राप्त किया जाए?