2012-04-30 12 views

उत्तर

12

जीएलएसएल और ओपनजीएल विनिर्देश इस संबंध में अनिवार्य रूप से भ्रमित हैं। ओपनजीएल स्पेक को समझना आसान है: gl_FragCoord विंडो-स्पेस वर्टेक्स स्थिति के एक्स, वाई, और जेड घटकों को स्टोर करता है। एक्स, वाई, और जेड मानों की गणना विंडो-स्पेस स्थिति की गणना के लिए वर्णित की गई है (हालांकि पिक्सेल-केंद्र और ऊपरी-बाएं मूल एक्स और वाई मानों को संशोधित कर सकते हैं)। यह spec के Coordinate Transforms खंड में वर्णित है।

gl_FragCoord की डब्ल्यू घटक है (1/डब्ल्यू ), जहां डब्ल्यू क्लिप अंतरिक्ष शीर्ष स्थिति है। यह आपके कशेरुक शेडर से gl_Position.w है।

क्लिप-स्पेस स्थिति वापस पाने के लिए W c को रखने के लिए एकमात्र उपयोगी उद्देश्य reverse-transform gl_FragCoord है। जो, जैसा कि पृष्ठ दिखाता है, डब्ल्यू सी द्वारा गुणा करने की आवश्यकता है। लेकिन चूंकि gl_FragCoord केवल इस मान के विपरीत स्टोर करता है, अब इसे gl_FragCoord.w द्वारा विभाजित करने की आवश्यकता है।

इसलिए, हम मान सकते हैं कि ओपनजीएल इसे इस तरह से स्टोर करता है क्योंकि ओपनजीएल को बहुत अधिक समझने की अनुमति नहीं है;) देखें, यह एक नियम है कि ओपनजीएल विनिर्देश के प्रत्येक भाग में कुछ असामान्य होना चाहिए। एक्सवाईजेड घटकों ने बहुत अधिक समझदारी की, इसलिए उन्होंने यह तय करने का फैसला किया कि यह वास्तव में आपके इच्छित मूल्य के विपरीत स्टोर करता है।

ठीक है, तकनीकी रूप से यह उन दिनों से ऐतिहासिक कलाकृति है जब 3 डी लैब्स ने जीएलएसएल बनाया था। मुझे यकीन है कि उन्होंने इसे पूरी तरह स्वार्थी हार्डवेयर कारणों से किया है, लेकिन मेरे पास इसका कोई वास्तविक सबूत नहीं है।

2

एक सजातीय निर्देशांक द्वारा दिया जाता है: (डब्ल्यू, एक्स, वाई, जेड) है, जो करने के लिए परियोजनाओं : (एक्स/डब्ल्यू y/डब्ल्यू, z/डब्ल्यू,)gl_FragCoord इस प्रक्षेपण को स्टोर करता है, लेकिन अंतिम घटक के लिए (बेकार) (w/w) = (1) संग्रहित करने के बजाय, यह उपयोगी जानकारी को संरक्षित करने के लिए (1/W) स्टोर करता है।

+1

"' gl_FragCoord' इस प्रक्षेपण को स्टोर करता है "नहीं, यह विंडो-स्पेस में पोस्ट प्रक्षेपण परिवर्तन को संग्रहीत करता है। –

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