से हमेशा कम है इसलिए मैं अपनी सभी कस्टम 3 डी रूपांतरण पाइपलाइन लिख रहा हूं ताकि यह सब कुछ कैसे काम करता है, इसकी बेहतर समझ प्राप्त हो सके। मैं स्क्रीन पर सब कुछ ठीक से प्रस्तुत कर सकता हूं और अब मैं वापस जाने और क्लिपिंग को देखने के बारे में हूं।परिप्रेक्ष्य विभाजन के बाद जेड वैल्यू -1
मेरी समझ से, मुझे एक चरम बिंदु को क्लिप करना चाहिए यदि परिप्रेक्ष्य विभाजन के बाद x या y मान [-1, 1] की सीमा से बाहर है और मेरे मामले में यदि z मान सीमाओं के बाहर है [ 0, 1]।
जब मैं इसे लागू करता हूं, तो मेरा z मान हमेशा -1.xxxxxxxxxxx है जहां xxxxxxx बहुत छोटी संख्या है।
यह थोड़ा लंबा है, और मैं क्षमा चाहता हूं, लेकिन मैं यह सुनिश्चित करना चाहता था कि मैंने जो सारी जानकारी दी थी, मैंने उसे दिया।
पहले सम्मेलनों:
मैं एक बाएं हाथ के प्रणाली जहां एक मैट्रिक्स इस तरह दिखता उपयोग कर रहा हूँ:
[m00, m01, m02, m03]
[m10, m11, m12, m13]
[m20, m21, m22, m23]
[m30, m31, m32, m33]
और मेरे वैक्टर कॉलम इस तरह देख रहे हैं:
[x]
[y]
[z]
[w]
मेरा कैमरा इसके साथ स्थापित है:
पीआई/4 के रेडियंस में एक लंबवत एफओवी।
का एक पहलू राशन 1. (वर्ग दृश्य पोर्ट)
की 1.
एक के पास क्लिप मूल्य 1000.
0.
की प्रारंभिक दुनिया एक्स स्थिति का एक दूर क्लिप मूल्य0 की शुरुआती दुनिया वाई स्थिति 0.
-500 की प्रारंभिक दुनिया z स्थिति।
चरण 1:: गुणा कैमरा मैट्रिक्स द्वारा शीर्ष
कैमरे की स्थिति Z अक्ष नीचे लग रही है (0, 0, 1)
एक शीर्ष, इस तरह काम करता है पाइपलाइन को देखते हुए ।
चरण 2: प्रक्षेपण मैट्रिक्स द्वारा वर्टेक्स को गुणा करें।
प्रोजेक्शन मैट्रिक्स है:
[2.41421, 0, 0, 0]
[0 2.41421, 0, 0]
[0, 0, 1.001001, 1]
[0, 0, -1.001001, 0]
चरण 3: गुणा एक्स, 1/डब्ल्यू द्वारा y और z घटकों।
चरण 4: [यह वह जगह है जहां समस्या है] बाहरी सीमाओं के बाहर कशेरुक को क्लिप करें।
चरण 5: स्क्रीन निर्देशांक में कनवर्ट करें।
एक उदाहरण शिखर मेरे पास है
(-100, -100, 0, 1)
है कैमरा मैट्रिक्स से गुणा करने के बाद मैं मिलता है:
(-100, -100, 500, 1)
कौन समझ में आता है क्योंकि कैमरा के सापेक्ष, कि शीर्ष करने के लिए 100 यूनिट है बाएं और नीचे और 500 इकाइयां आगे। यह 1 के पास क्लिप और 1000 डब्ल्यू के दूर क्लिप के बीच भी है अभी भी 1.
है प्रक्षेपण मैट्रिक्स से गुणा करने के बाद मैं मिलता है:
(-241.42135, -241.42135, 601.600600, -600.600600)
यह मैं अगर यह बनाता है यकीन नहीं है समझ। x और y सही होने लगते हैं, लेकिन मैं जेड के बारे में और w के बाद से परिप्रेक्ष्य विभाजन का अगला कदम अजीब है iffy हूँ।
परिप्रेक्ष्य विभाजन के बाद मुझे मिलती है:
(0.401966, 0.401966, -1.001665, 1)
फिर x और y मतलब, वे की सीमा के भीतर दोनों हैं [-1, 1]। लेकिन ज़ेड वैल्यू सीमाओं के बाहर स्पष्ट रूप से स्पष्ट है, भले ही मुझे विश्वास है कि यह अभी भी निराशा के भीतर होना चाहिए। डब्ल्यू 1 पर वापस आ गया है जो फिर से समझ में आता है।
फिर उपन्यास के लिए क्षमा करें, लेकिन मैं आशा करती हूं किसी की मदद कर सकते हैं मुझे यह पता लगाने की मैं गलत तरीके से क्या कर रही हूं।
धन्यवाद!
अच्छा सामान। मुझे यह सुनकर खुशी हो रही है कि आपको यह पता चला है कि ':)' –
आपकी मदद के लिए धन्यवाद, मैं निश्चित रूप से इसकी सराहना करता हूं। – Jon