5

में एक पास के साथ एकाधिक बनावट में प्रस्तुत करना मैं सी ++ डायरेक्टएक्स 11 एसडीके का उपयोग करके एक पास के साथ दो बनावट प्रस्तुत करने की कोशिश कर रहा हूं। मैं चाहता हूं कि एक बनावट में परिणाम छवि के प्रत्येक पिक्सेल का रंग हो (जिसे मैं आमतौर पर स्क्रीन पर 3 डी दृश्य प्रस्तुत करते समय स्क्रीन पर देखता हूं), और प्रत्येक पिक्सेल और गहराई के सामान्य (3 सामान्य और 1 फ्लोट के लिए 3 फ्लोट) रखने के लिए एक और बनावट गहराई के लिए)। अभी, मैं क्या सोच सकता हूं कि दो प्रतिपादन लक्ष्य बनाना और रंगों के रूप में पहला पास प्रस्तुत करना और दूसरा क्रमशः प्रत्येक प्रतिपादन लक्ष्य के लिए मानक और गहराई को पारित करना है। हालांकि, यह समय बर्बाद लगता है क्योंकि मैं पहले पास में प्रत्येक पिक्सेल के रंग, सामान्य और गहराई की जानकारी प्राप्त कर सकता हूं। तो पिक्सेल शेडर के साथ दो बनावट आउटपुट करने का कोई तरीका है?डायरेक्टएक्स 11

किसी भी मदद की सराहना की जाएगी।

पीएस मैं पिक्सेल शेडर में RWTexture2D या RWStructuredBuffer की तर्ज पर कुछ सोच रहा हूं। एक छोटी सी पृष्ठभूमि: गणना गणना में आगे प्रसंस्करण के लिए मुझे दो छवियों की आवश्यकता होगी। जो सिंक्रनाइज़ेशन का एक साइड सवाल लाता है: चूंकि पिक्सेल शेडर (गणना शदर के विपरीत) एक समय में प्रत्येक पिक्सेल लिखता है, मुझे कैसे पता चलेगा कि पिक्सेल शेडर कब समाप्त हो गया है और छवि पोस्ट-प्रोसेसिंग शुरू करने के लिए गणना शेडर को बताएं?

उत्तर

10

आपको एक पास में इसे प्रस्तुत करने के लिए एमआरटी (एकाधिक रेंडर लक्ष्य) का उपयोग करने की आवश्यकता है।

आप उत्पादन का उपयोग कर OMSetRenderTargets

http://msdn.microsoft.com/en-us/library/windows/desktop/ff476464(v=vs.85).aspx

वहाँ http://hieroglyph3.codeplex.com/ (DefferedRendering) में एक उदाहरण है जो तब पता चलता बार में दोनों बनावट में लिखने के लिए कैसे के रूप में दोनों लक्ष्यों को बाध्य कर सकते हैं।

बस मूल रूप से अपने पिक्सेल शेडर उत्पादन एक ही रंग के बजाय एक संरचना होगा:

struct PS_OUTPUT 
{ 
    float4 Color: SV_Target0; 
    float4 Normal: SV_Target1; 
}; 

इसके अलावा इंटरनेट 11 में आप अपने सामान्य बफर करने के लिए गहराई लिखने की ज़रूरत नहीं होना चाहिए, तो आप सिर्फ गहराई बफर उपयोग कर सकते हैं।

पिक्सेल/कंप्यूट शेडर सिंक के लिए, आप उसी डिवाइस पर एक ही समय में एक पिक्सेल शेडर और एक कंप्यूट शेडर नहीं चला सकते हैं, इसलिए जब आपकी ड्रा कॉल समाप्त हो जाती हैं, तो बनावट प्रेषण के लिए गणना में उपयोग करने के लिए तैयार होती है ।

+0

धन्यवाद। विशेष रूप से लिंक के लिए। आप कल्पना करना शुरू नहीं कर सकते कि वे कितने सहायक हैं। एक बार फिर धन्यवाद। वैसे, "गहराई बफर" द्वारा, आप पिक्सेल शेडर के लिए एक SV_Depth मान का मतलब है? (मुझे लगता है कि मैंने इसे कहीं पढ़ा है, लेकिन मुझे भी यकीन नहीं है।) +1 और स्वीकृत उत्तर। – l3utterfly

+0

कोई जांच नहीं। SV_Depth यह है कि यदि आप अपना गहराई मूल्य लिखना चाहते हैं, तो यह कुछ मामलों में उपयोगी है (पिक्सेलशैडर रेएट्रैसर से गहराई, या कुछ बनावट ऐरे फिडलिंग)। मेरा मतलब था कि गहराई के संसाधन को शेडर संसाधन दृश्य के रूप में भी बाध्य किया जा सकता है, इसलिए जब आप अपने दृश्य में गहराई बफर बांधेंगे तो आप इसका पुन: उपयोग कर सकते हैं, यह मुफ़्त है) – catflier