मैं अपना स्वयं का 3D इंजन जावास्क्रिप्ट में रोल कर रहा हूं, और केवल कैनवास ड्राइंग का उपयोग कर रहा हूं, कोई WebGL नहीं। यह एक और Minecraft क्लोन है; मुझे बक्से से प्यार है, मुझे जज मत करो।
अब तक, एक चीज को छोड़कर, सब कुछ आश्चर्यजनक रूप से काम करता है: 3 डी में, जब कुछ कोने निकट की कतरन वाले विमान के पीछे जाते हैं, तो स्क्रीन पर उनका प्रक्षेपण अजीब हो जाता है (एक विमान का पता लगाने के लिए उपयोग किए जाने वाले अन्य कोने सामने हैं)।
मैंने इन बिंदुओं को क्लिप करने की कोशिश की, लेकिन फिर मैं उन सतहों को गर्त में देख सकता हूं जो इन कोने का उपयोग करते हैं। WebGL / OpenGL में ग्राफिक्स कार्ड इन बिंदुओं का ध्यान रखता है और विमान को सही तरीके से प्रस्तुत किया जाता है, लेकिन मेरे पास हार्डवेयर तक पहुंच नहीं है इसलिए मुझे इसे स्वयं कोड करना होगा।
मुझे यकीन नहीं है कि इसे क्या बनाना है, वर्तमान में जो आखिरी चीज दिमाग में आई है वह खिलाड़ी के पास क्लिपिंग प्लेन के पीछे के बिंदुओं के प्रक्षेपण को उल्टा करना है, जो तर्कसंगत लगता है क्योंकि मुझे एक स्क्रीन पर एक बिंदु को प्रोजेक्ट करना होगा जो सामने है शिखर के।
यहाँ मेरे विचार हैं:
यह देखने के लिए कि क्या होता है:
दूरी से ब्लू बॉक्स पूरी तरह से अच्छी तरह से प्रस्तुत करता है।
जब कुछ कोने खिलाड़ी के कतरन वाले विमान के पीछे जाते हैं तो मैं उल्टा प्रक्षेपण करता हूं, लेकिन यह सही नहीं लगता है:
focalLength *= -1;
2d.x = x*focalLength/z;
2d.y = y*focalLength/z;
ध्यान दें कि पीछे का ग्रे बॉक्स पूरी तरह से हटा दिया गया है क्योंकि इसके चेहरे को खींचने के लिए उपयोग किए गए सभी कोने खिलाड़ी के पीछे हैं।
ऊपर या नीचे देखने पर यही होता है।
मुझे नहीं पता कि इसके पीछे क्या गणित है, मैं उम्मीद कर रहा हूं कि किसी को पहले ही समस्या का सामना करना पड़ा हो और वह मेरी मदद कर सके।
lineTo(x,y)
फ़ंक्शन को अभी भी बुलाया जा सकता है, केवल मुझे नहीं पता कि यह कैसे व्यवहार करता है ... यह एक विचित्र आयाम है, मैं सहमत हूं।