मैं वर्तमान में एक 2D गेम पर काम कर रहा हूं, और मेरा वर्तमान कार्य चयनित ऑब्जेक्ट को रेखांकित करना है।
मैं मूल रूप से इसे पूरी तरह से रनटाइम करने के लिए ब्लर शेडर का उपयोग करता हूं। मैं पहली बार एक ऊर्ध्वाधर गाऊसी ब्लर शेडर का उपयोग करके अपने स्प्राइट को आकर्षित करता हूं, फिर मैं इसे एक क्षैतिज गॉसियन ब्लर शेडर के साथ खींचता हूं, और फिर मैं अपने स्प्राइट को सामान्य रूप से खींचता हूं।
यहाँ मेरा धब्बा छायादार है: नमूना बनावट बनावट: रजिस्टर (s0);
#define SAMPLE_COUNT 15
float2 SampleOffsets[SAMPLE_COUNT];
float SampleWeights[SAMPLE_COUNT];
float4 PixelShaderFunction(float2 texCoord : TEXCOORD0) : COLOR0
{
float4 c = 0;
// Combine a number of weighted image filter taps.
for (int i = 0; i < SAMPLE_COUNT; i++)
{
c += tex2D(TextureSampler, texCoord + SampleOffsets[i]) * SampleWeights[i];
}
return c;
}
SampleOffets वे राउंडिंग पिक्सेल हैं जो मुझे परीक्षण करने की अनुमति देते हैं। नमूना भार गॉसियन फ़ंक्शन ( http://en.wikipedia.org/wiki/Gaussian_blur ) के साथ गणना की जाती है।
यहाँ परिणाम है:
यह बुरा नहीं है, काफी चिकना है, लेकिन खेल में पर्याप्त दिखाई नहीं दे रहा है ... लेकिन मैं मोटाई (इसे बड़ा करने के लिए) को नियंत्रित करने में सक्षम होना चाहता हूं, और अल्फा में इसे बनाने से पहले पहली अपारदर्शी रूपरेखा जोड़ें। यह अधिक दिखाई देता है)। और मुझे लगता है कि गाऊसी धब्बा शायद उतना अच्छा नहीं है जितना मैंने अपने काम के लिए सोचा था :)
एक और विचार यह स्वचालित रूप से .png (इसे स्वचालित बनाने के लिए एक फ़ोटोशॉप स्क्रिप्ट का उपयोग करके) से उत्पन्न करना है। मुझे केवल एक कस्टम रंग के साथ आउटलाइन पिक्सल को भरने की जरूरत है, उदाहरण के लिए लाल घटक में अल्फा मान को संग्रहीत करना, और अन्य सभी घटकों को 0. पर सेट करना है। फिर मुझे सिर्फ एक shader को लागू करना होगा जो पारदर्शी पिक्सल को उस रंग में बदलना चाहता है जो मैं चाहता हूं।
float4 PixelShaderFunction2(float2 texCoord : TEXCOORD0) : COLOR0
{
float4 color = tex2D(TextureSampler, texCoord);
float4 newColor = 0;
if (color.a == 0 && color.r != 0)
{
color.a = color.r;
// Blue outline
color.b = 1;
}
}
समस्या यह है, मैं अपने स्प्राइट के लिए डीएक्सटी 5 संपीड़न का उपयोग कर रहा हूं, इसलिए मुझे यकीन नहीं हो सकता है कि जिस रंग को मैं अपनी छाया में प्राप्त करूंगा वह ठीक वैसा ही होगा जैसा मैंने लिखा था। यही कारण है कि मैं भी यह कोशिश नहीं की ... कोई विचार?
किसी भी सलाह का स्वागत किया जाएगा :)