2013-11-25 8 views
7

के साथ सीएसजी ड्राइंग, मैंने आधुनिक ओपनजीएल संस्करण के लिए OpenCSG को दोबारा कार्यान्वित किया है।एमएसएए के साथ एंटी-एलिज़िंग समस्या, गहराई और एफबीओ

PixelFormatAttributes:

NSOpenGLPFAColorSize , 24 , 
NSOpenGLPFAAlphaSize , 8 , 
NSOpenGLPFADepthSize , 32 , 
NSOpenGLPFAStencilSize , 8 , 
NSOpenGLPFAAccelerated , 
NSOpenGLPFADoubleBuffer , 
NSOpenGLPFASupersample , 
NSOpenGLPFASampleBuffers, 1 , 
NSOpenGLPFASamples  , 4 , 

FBO चश्मा: (multisample साथ FBO को प्रस्तुत करना कोशिश की, लेकिन लाइनों तल पर स्क्रीनशॉट पर देखने के लिए और अधिक मजबूत और दृश्य हो रही,)
- 2 की शक्ति के साथ बनावट बनाया, GL_RGBA (कोशिश की GL_RGBA8 और GL_RGBA32F)
- GL_DEPTH24_STENCIL8 (GL_DEPTH32_STENCIL8, कोई परिणाम की कोशिश की)


, बस एल्गोरिथ्म Goldfeather:

while (i < depth complexity) { 
    take channel for render 
     merge layers if no free channel 
    render each layer with stencil func, mask and depth params to channel (FBO) 
} 
merge layers (taking texture from FBO and render objects again with applying shader below) 


शेडर में मैं मर्ज करने के लिए कोड है (FBO से परिणाम बनावट के परीक्षण के लिए प्रतिपादन के शीर्ष पर ओवरलैप करता है, OpenCSG it's setupProjectiveTexture में):

 vec2 ndcPos = gl_FragCoord.xy/sizetexture.xy; 
    vec4 maskColor = texture2D(maskTexture, ndcPos.xy); 
    if (maskColor[channel] < 0.5) { 
     discard; 
    } 

enter image description here

ऐसा लगता है कि एफबीओ पर्याप्त स्पष्ट बनावट नहीं है या सही आकार नहीं है।

संपादित करें:
उन लाइनों केवल जाल घटाकर के स्थानों ओवरलैपिंग में दिखाई देता है।

संपादित करें 2:
गैर MSAA FBO के प्रतिपादन और परिणाम पर FXAA लागू करने के साथ ठीक किया गया।

+0

32-बिट रंग बफर + 8-बिट अल्फा मुझे विशेष रूप से असामान्य के रूप में मारता है। आम तौर पर पिक्सेल प्रारूप इस तरह सेट होते हैं: 32-बिट (8-बिट्स अप्रयुक्त) आरजीबी + 0 ए या 24-बिट आरजीबी + 8-बिट ए, लगभग 32-बिट आरजीबी + 8-बिट ए (जो 40-बिट रंग का उत्पादन करता है बफर)। इससे कोई फर्क नहीं पड़ता क्योंकि सीजीएल निकटतम प्रारूप से मेल खाता है, लेकिन आप इसे मौलिक रूप से अजीब चीज़ के लिए पूछ रहे हैं। –

+0

@ एंडोनएम। कोलमैन वास्तव में आप सही हैं, बदल जाएगा! लेकिन यह मेरी समस्या का समाधान नहीं किया। मुझे इसी तरह के मुद्दे को हल करने के बारे में कुछ लेख मिले: 1. http://www.alphanew.net/index.php?section=articles&site=multisampling 2. http://mtnphil.wordpress.com/2013/06/ 26/पता-तुम्हारा-एसएसओ-कलाकृतियों/ लेकिन मेरे लिए पूरी तरह से समझना मुश्किल है, क्योंकि मैं मूल वक्ता नहीं हूं। शायद बाद में समझ जाएगा। – SAKrisT

+0

वैसे, जब आप अपने पिक्सेल प्रारूप में 'Supersample' निर्दिष्ट करते हैं तो आप एमएसएए के बजाय एसएसएए के लिए जीएल पूछ रहे हैं। यह ओएस एक्स है; मैंने कभी भी ओएस एक्स पर एक हार्डवेयर त्वरित पिक्सेल प्रारूप का सामना नहीं किया है जो सुपरसंपलिंग का समर्थन करता है, केवल सॉफ्टवेयर प्रस्तुतकर्ता। मैं सुझाव दूंगा कि आप इसे अपने पिक्सेल प्रारूप से भी हटा दें। इस बिंदु पर यह बहुत नाइट-पिक्य हो रहा है, लेकिन चूंकि प्रश्न में केवल एक ही जानकारी आपके पिक्सेल प्रारूप से संबंधित है ... :) –

उत्तर

0

सुनिश्चित नहीं है कि मुझे आपकी स्पष्टीकरण सही मिल गई है। आप शेडर में किस प्रकार का बनावट नमूना कर रहे हैं?

मुझे आपके द्वारा कार्यान्वित किए गए एल्गोरिदम के विनिर्देशों को नहीं पता है, लेकिन यदि उस बनावट में पहले से किए गए बहुआयामी एकत्रण के साथ कुछ पिछली गणनाओं के परिणाम शामिल हैं, तो मुझे सच में यकीन नहीं है कि आप पूरे परिणाम के लिए उस परिणाम का उपयोग कर सकते हैं (और इसके सभी नमूने)। मुखौटा किनारों पर फीका जा रहा है, जो यहां समस्या है।

शायद आपको "हाथ से" नमूना एकत्र करना चाहिए, उदाहरण के लिए एक नमूना 2 डीएमएस का उपयोग करें और शेडर में texelFetch के साथ व्यक्तिगत नमूने पढ़ें।

एक और समाधान सीमाओं पर लुप्त होने से रोकने के लिए पहले पास में gl_SampleMask को सेट करने के लिए हो सकता है।

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