SDL_RenderSetScale गलत तरीके से SDL2 में घुमाया बिटमैप्स पर लागू होता है (2.0.3)

वोट
4

SDL_RenderSetScaleसमन्वय तदनुसार स्केल करेगा जब तक रोटेशन के साथ प्रयोग किया जाता है SDL_RenderCopyEx। एसडीएल स्केलिंग पूर्व रोटेशन लागू करने के लिए लगता है, इसलिए घुमाया बनावट के पक्ष अनुपात गलत है। उदाहरण के लिए, एक बनावट 90 डिग्री घुमाया x और y स्केलिंग उलट होगा। मैं इस स्केलिंग प्रतिक्रिया करने के लिए एक फार्मूला गणना करने के लिए कोशिश की है, लेकिन परिणाम बहुत अच्छा नहीं है।

मैं भी देखा है कि सीधी रेखाओं के साथ तैयार SDL_RenderDrawLineस्केलिंग के अनुसार एक अलग मोटाई तैयार कर रहे हैं, लेकिन विकर्ण लाइनों अभी भी स्क्रीन पिक्सेल प्रति तैयार कर रहे हैं।

क्या किसी अन्य व्यक्ति को यह समस्या है? वहाँ इसके चारों ओर एक और तरीका वांछित परिणाम प्राप्त करने के लिए है? वहाँ SDL2 ठीक करने के लिए इसलिए स्केलिंग प्रभाव में एक जैसा है किसी भी योजना है?

24/01/2015 को 05:22
उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
1

इस कोड का उपयोग करना, मुझे डर है कि मैं समस्या को ठीक करने में सक्षम नहीं था हूँ:

SDL_RenderSetScale(renderer, 4.0f, 4.0f);

SDL_Rect rect = { 16, 16, 128, 128 };
SDL_RenderCopyEx(renderer, tex, NULL, &rect, 90.0, NULL, SDL_FLIP_NONE);

यह पूरी तरह से ठीक काम करता है, छवि 90 डिग्री घुमाया जाता है, 4. का एक पहलू से बढ़ाया चूंकि यह 2 साल मेरा जवाब से पहले कहा गया था, मैं इस किया गया है हो सकता है के बाद से मैं कर रहा हूँ, एसडीएल 2.0.3 में एक बग ग्रहण करता हूँ एसडीएल 2.0.5 का उपयोग कर।

इस नवीनतम संस्करण पर वैसे भी होना चाहिए, नहीं सभी आशा खो दिया है। का उपयोग कर के लिए एक वैकल्पिक SDL_RenderSetScaleबस अपने वांछित पैमाने है, जो, मेरे अनुभव से, काम करता है बस के रूप में अच्छी तरह से कर अपने गंतव्य आयत की चौड़ाई और ऊंचाई गुणा करने के लिए है। तथ्य यह है कि आप में आयत गुजर होगी ध्यान में रखते हुए SDL_RenderCopyExसीधे, समारोह सबसे निश्चित रूप से यह ध्यान में रखना चाहिए जब घूर्णन।

02/02/2017 को 15:58
का स्रोत उपयोगकर्ता

वोट
2

अफसोस, नहीं। मुद्दा अलग चौड़ाई और ऊंचाई स्केलिंग कारकों के साथ स्पष्ट हो जाता है। प्रयत्न:

SDL_RenderSetScale(renderer, 4.0f, 2.0f);
SDL_Rect rect = { 16, 16, 128, 128 };
SDL_RenderCopyEx(renderer, tex, NULL, &rect, 90.0, NULL, SDL_FLIP_NONE);

... और आप समस्या दिखाई देगी।

आप उम्मीद एक मूल रूप से वर्ग बनावट अब एक विस्तृत आयत होने के लिए होता है, लेकिन इसके बजाय यह एक लंबा आयत है।

स्केलिंग रोटेशन से पहले लागू किया जाता है - जबकि मैं व्यक्तिगत रूप से स्केलिंग, SDL_RenderSetScale के पूरे मुद्दे (के रूप में) रोटेशन के बाद लागू किया जाना एक स्वतंत्र समन्वय प्रणाली चुना जाना अनुमति देने के लिए उचित रूप में था उम्मीद करेंगे, लेकिन अगर दोनों में से पहलू अनुपात समन्वय प्रणाली तो किसी भी घुमाया बनावट गलत प्रदर्शित किया जाएगा, ही नहीं हैं।

रोनी

05/03/2017 को 11:12
का स्रोत उपयोगकर्ता

वोट
1

इस प्रश्न का चार साल पहले कहा गया है लेकिन मैं अभी भी इस समस्या का सामना कर रहा हूँ। तो, अगर किसी के द्वारा ड्रॉप, यहाँ मेरा उत्तर है।

एसडीएल संस्करण के बारे में Lignum की धारणा गलत है। दरअसल, मैं एसडीएल 2.0.9 के साथ काम कर रहा हूँ और यह सवाल अभी भी प्रासंगिक है। रोनी के रूप में कहे अनुसार, इस समस्या को केवल आता है जब पहलू अनुपात को संरक्षित नहीं किया गया है (Lignum कोड उदाहरण में, पहलू अनुपात x और y अक्ष के साथ पैमाना कारक के रूप में संरक्षित है बराबर हैं)।

एकमात्र समाधान, मुझे डर लग रहा है, बस SDL_RenderSetScale से बचने और मैन्युअल SDL_RenderCopyEx में गंतव्य आयत के निर्देशांक पैमाने पर करने के लिए है।

01/05/2019 को 15:25
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more