के साथ Omnidirectional छाया मानचित्रण मैं omnidirectional बिंदु रोशनी के साथ काम कर रहा हूँ। मैंने पहले से ही 6 फ्रेमबफर के रंग अटैचमेंट के रूप में एक क्यूबमैप बनावट का उपयोग करके छाया मैपिंग लागू किया है, और प्रत्येक पिक्सेल में प्रकाश-से-खंड दूरी को एन्कोड कर रहा है।गहराई cubemap
अब मैं, चाहते हैं, तो यह संभव है, मेरी कार्यान्वयन इस तरह से बदलने के लिए:
- 1), मेरे framebuffers की गहराई बफर करने के लिए एक गहराई cubemap बनावट देते हैं रंग की बजाय।
- 2) केवल गहराई से प्रस्तुत करना,,, मुख्य पास में यह पास
- 3) में रंग लिख सकता हूँ नहीं cubemap बनावट से गहराई पढ़ यह एक दूरी में बदलने का है, और जाँच वर्तमान टुकड़ा द्वारा occluded रहा है या नहीं प्रकाश या नहीं।
मेरी समस्या तब होती है जब क्यूबमैप से गहराई मूल्य को दूरी में परिवर्तित किया जाता है। मैं cubemap में अपनी गहराई मूल्य लाने के लिए प्रकाश-से-खंड वेक्टर (विश्व अंतरिक्ष में) का उपयोग करता हूं। इस बिंदु पर, मुझे नहीं पता कि छह चेहरों का उपयोग किस प्रकार किया जा रहा है, न ही 2 डी बनावट निर्देशांक जो गहराई मूल्य पढ़ रहा हूं उससे मेल खाता है। तो मैं उस गहराई मूल्य को दूरी में कैसे परिवर्तित कर सकता हूं?
यहाँ मेरी कोड के स्निपेट वर्णन करने के लिए कर रहे हैं:
गहराई को बनावट:
glGenTextures(1, &TextureHandle);
glBindTexture(GL_TEXTURE_CUBE_MAP, TextureHandle);
for (int i = 0; i < 6; ++i)
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_DEPTH_COMPONENT,
Width, Height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
framebuffers निर्माण:
for (int i = 0; i < 6; ++i)
{
glGenFramebuffers(1, &FBO->FrameBufferID);
glBindFramebuffer(GL_FRAMEBUFFER, FBO->FrameBufferID);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, TextureHandle, 0);
glDrawBuffer(GL_NONE);
}
टुकड़ा शेडर का टुकड़ा मैं प्राप्त करने के लिए लिखने के लिए कोशिश कर रहा हूँ मेरा कोड:
float ComputeShadowFactor(samplerCubeShadow ShadowCubeMap, vec3 VertToLightWS)
{
float ShadowVec = texture(ShadowCubeMap, vec4(VertToLightWS, 1.0));
ShadowVec = DepthValueToDistance(ShadowVec);
if (ShadowVec * ShadowVec > dot(VertToLightWS, VertToLightWS))
return 1.0;
return 0.0;
}
DepthValueToDistance फ़ंक्शन मेरी वास्तविक समस्या है।
"क्या मेरी समस्या का समाधान है?" दूरी को गहराई में कनवर्ट करें, क्यूबमैप में संग्रहीत गहराई से तुलना करें। "घन नक्शा छाया के लिए अपरिवर्तनीय" मुझे लगता है कि 5..7 साल पहले किसी को "रॉन फ्रैज़ियर" कहा जाता था, छाया मैपिंग के लिए क्यूबमैप्स का उपयोग करने के बारे में एक लेख लिखा था। – SigTerm
@ सिगटर्म http://www.ronfrazier.net/apparition/index.html?appmain=research/index.html मुझे लगता है कि आप किस बारे में बात कर रहे हैं। –
@ जोहान रिसेलवेटो: हाँ। मैं ** सोचता हूं ** यह [यह] था (http://www.ronfrazier.net/apparition/index.html?appmain=research/index.html) आलेख। आधुनिक ओपनजीएल/बेहतर परिशुद्धता के साथ कुछ ऐसा करना संभव है (फ्लोटिंग पॉइंट बनावट, जीएलएसएल, '* छाया 'नमूने इत्यादि हैं) - मेरे पास बस एक काम करने वाला स्निपेट नहीं है और एक लिखना पसंद नहीं है । – SigTerm