मैं एक 3D XNA गेम में छाया जोड़ने की कोशिश करना चाहता हूं। मैंने एक प्रकाश और एक कैमरे के साथ कुछ परीक्षण वातावरण स्थापित किया है। हालांकि, मैं अपने दृष्टिकोण के साथ कलाकृतियों में भाग रहा हूं।
मैं अंतिम परिणाम प्रस्तुत करने के लिए http://pastebin.com/zXi0hmsU से shader कोड का उपयोग कर रहा हूं और छाया नक्शे बनाने के लिए http://pastebin.com/rY4Gcj9N । कोड बहुत सीधे आगे है और इसमें लाइट पॉइंट ऑफ व्यू पॉइंट से डेप्थमैप का उत्पादन शामिल है, फिर इसे कैमरा स्पेस में पेश किया जा रहा है और ऑक्युलस के लिए जाँच की जा रही है।
हालांकि, अधिकांश कोणों से मुझे बहुत बदसूरत परिणाम मिल रहे हैं
दृश्य में कुछ सरल क्यूब्स होते हैं (हाथ से निर्मित, बाहर का सामना करना पड़ रहा है, बैकफेस को कुल्ला किया जाता है), एक प्रकाश (ऊपरी बाएं कोने में दिखाया गया छाया नक्शा - ठीक दिखता है) और एक कैमरा।
छाया मानचित्रों के लिए मेरा रेंडरटार्ग आरंभीकृत है
int shadowMapSize = 512;
RenderTarget2D shadowMap = new RenderTarget2D(GraphicsDevice, shadowMapSize,
shadowMapSize, true, GraphicsDevice.PresentationParameters.BackBufferFormat,
DepthFormat.Depth24Stencil8);
GraphicsDevice.SetRenderTarget(shadowMap);
GraphicsDevice.Clear(Color.White);
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
बाद में, CreateShadowMap
प्रभाव लागू किया जाता है, इसके बाद लैंबर्टविथशेड्स प्रभाव होता है। अंत में, छाया मानचित्र का उपयोग करके तैयार किया जाता है SpriteBatch
।
बाकी के कोड में केवल shaders को सही मान प्रदान करना शामिल है। यदि आवश्यक हो, तो मैं इसे अच्छी तरह से प्रदान कर सकता हूं।