Bob's answer फ़िल्टरिंग मोड को TextureFilter.Point
पर बदलने के लिए सही है और चीजों को अच्छी और पिक्सलेटेड रखने के लिए सही है।
लेकिन संभवतः प्रत्येक स्प्राइट (आप भी प्रत्येक स्प्राइट की स्थिति पैमाने पर होगा के रूप में) है स्केलिंग बस SpriteBatch.Begin
करने के लिए एक मैट्रिक्स पारित करने के लिए है, तो तरह से एक बेहतर तरीका:
sb.Begin(/* first three parameters */, Matrix.CreateScale(4f));
दे देंगे कि आप अपनी सभी ड्रॉ कॉल को संशोधित किए बिना स्केलिंग चाहते हैं।
हालांकि यह ध्यान देने योग्य है कि, यदि आप अपने गेम में फ़्लोटिंग-पॉइंट ऑफ़सेट का उपयोग करते हैं, तो आप स्केल अप (किसी भी विधि के साथ) पिक्सेल सीमाओं के साथ गठबंधन नहीं किए गए चीजों के साथ समाप्त हो जाएंगे।
इसके लिए दो समाधान हैं।
public static Vector2 Floor(Vector2 v)
{
return new Vector2((float)Math.Floor(v.X), (float)Math.Floor(v.Y));
}
और फिर है कि समारोह के माध्यम से अपनी स्थिति को हर बार जब आप एक स्प्राइट आकर्षित पारित: पहले इस तरह एक समारोह है। यद्यपि यह संभवतः काम नहीं कर सकता है अगर आपके sprites किसी भी रोटेशन या ऑफसेट का उपयोग करें। और फिर आप प्रत्येक एकल ड्रॉ कॉल को संशोधित करने के लिए वापस आ जाएंगे।
ऐसा करने के लिए "सही" तरीका, यदि आप अपने पूरे दृश्य का सादा बिंदु-वार स्केल-अप चाहते हैं, तो अपने दृश्य को मूल आकार में एक प्रस्तुत करने के लक्ष्य को आकर्षित करना है। और फिर स्क्रीन पर अपना रेंडर लक्ष्य बनाएं, स्केल किया गया (TextureFilter.Point
के साथ)।
जिस फ़ंक्शन को आप देखना चाहते हैं वह GraphicsDevice.SetRenderTarget
है। This MSDN article पढ़ने योग्य हो सकता है। यदि आप एक्सएनए 4.0, this might be worth reading पर जा रहे हैं या आगे बढ़ रहे हैं।
मुझे इसके लिए एक आसान एक्सएनए नमूना नहीं मिला, लेकिन Bloom Postprocess नमूना एक रेंडर लक्ष्य का उपयोग करता है जो उसके बाद एक धुंधला शेडर लागू करता है। आप आसानी से शेडर को अनदेखा कर सकते हैं और केवल स्केल-अप कर सकते हैं।
स्रोत
2010-07-20 04:46:40
प्रश्न क्या है? एक छवि को अपस्केल कैसे करें? या "पिक्सेललेट" प्रभाव को कैसे कार्यान्वित करें? – Gobra