मैं ग्राफिक्स के लिए नया हूं, इसलिए मुझे नहीं पता कि लोग आमतौर पर चीजों को प्रस्तुत करने के लिए फ्रेम दर को कैसे नियंत्रित करते हैं। मेरा मतलब है, आप 30fps कहने के लिए आवेदन कैसे सेट कर सकते हैं? शायद ऐसी कई एपीआई हैं जो ऐसी चीज प्रदान करती हैं, लेकिन मुझे इसे स्क्रैच से कोड करने की आवश्यकता है।फ्रेम दर को नियंत्रित करने का सामान्य तरीका क्या है?
उत्तर
फ़्रेमेट "नियंत्रण" के दो "सामान्य" तरीके हैं, और न ही यह काफी सरल है।
दोनों की पहली और अधिक नियंत्रण, और आमतौर पर वैकल्पिक जो कुछ है, VSync है। मॉनीटर रीफ्रेशिंग होने पर यह वीडियो कार्ड को केवल नए फ्रेम को धक्का देने के लिए मजबूर करता है। कई मॉनीटर 60 हर्ट्ज पर रीफ्रेश करते हैं, इसलिए आपको 60 एफपीएस मिलते हैं।
यह रीफ्रेश दर की निगरानी के लिए टोपी फ़्रेमेटेट के लिए काफी अच्छा काम करता है, लेकिन जब फ्रेमरेट रीफ्रेश के नीचे गिरता है, तो इसे अगले एकाधिक पर मजबूर किया जाता है। इस प्रकार, के रूप में फ़्रेमरेट थोड़ा ड्रॉप करने के लिए शुरू होता है, तो आप काफी संभावित प्रतिपादन समय का एक सा, खो देते हैं, क्योंकि यह 60 है, तो 30, फिर 20, मजबूर है आदि
(DirectX और OpenGL में vsync के बारे में जानकारी का एक सा)
दूसरी विधि, आमतौर पर उपयोग की जाने वाली दूसरी विधि (बनाम वैकल्पिक रूप से जोड़ा गया) फ़्रेमेट को सीमित नहीं करना है। इसके बजाय, अंतर को संभालने के लिए अपना कोड समायोजित करें। यह लंबे समय तक और अधिक सामान्य लचीलापन, आईएमओ, और एक विशेष एफपीएस गणना को मजबूर करने की कोशिश करने से कहीं अधिक सरल है।
while (gameloop)
{
float framedelta = (timeNow - timeLast)
timeLast = timeNow;
for each (GameObject object in World)
{
object->Animate(framedelta);
object->Move(speed * framedelta)
}
render();
}
आप समय अंतर/समय वहाँ से पारित कर दिया/डेल्टा, और काम को देखने के लिए चाहते हैं:
मान लें कि आप एक सरल पाश प्रस्तुत करना है, यह की तरह कुछ के लिए देख बाहर शुरू होता है। फ़्रेमेट को हार्डवेयर और सेटिंग्स के आधार पर स्केल करने की अनुमति दें (आपके लिए अनुमान लगाने या आधे को संभालने के लिए बहुत अधिक भिन्नताएं हैं), और इसे नियंत्रित करने के बजाय अपने गेम को इसके साथ काम करें। आपके लिए बहुत आसान और अभ्यास में अधिक लचीला और स्थिर।
30 आने के बाद 20;) – fredoverflow
अनुमानित (यदि स्थिर नहीं है) फ्रेम दर (वीडियो या 3 डी ग्राफिक्स के साथ) को निम्नलिखित छद्म कोड में वर्णित करने का सामान्य तरीका है।
एल्गोरिथ्म
- अगले फ्रेम (बैक-बफर में प्रस्तुत करना) तैयार करें;
- शेष समय स्लाइस के लिए सो जाओ;
- फ्रेम को प्रदर्शित करने के लिए कहें (फ्रंट और बैक बफर स्वैप करें)।
नींद ऑपरेशन की स्थिति पर ध्यान दें। यह एक ही फ्रेम की तैयारी और प्रदर्शन के बीच सैंडविच है। स्थिर फ्रेम दर के लिए यह मुख्य कुंजी है! आप फ्रेम फ्रेम प्रदर्शित करने के लिए कुल समय स्लाइस में फ्रेम की तैयारी करना चाहते हैं।
इन चरणों में से प्रत्येक को लागू करने के तरीके पर कई प्रकार हैं (नींद ऑपरेशन की पसंद इसके संकल्प, विश्वसनीयता, इत्यादि के आधार पर), लेकिन मूल वहां है।
अतिरिक्त विश्वसनीयता
- के लिए टिप्स पूरे अंतराल के लिए एक बार अपने नींद समारोह आह्वान न करें। अधिकतम स्थिरता के साथ कुछ स्थिर परिभाषित करें जिसे आप स्वीकार करने के लिए तैयार हैं और बार-बार इस अंतराल की अवधि के लिए सोते हैं जब तक कि शेष राशि इस राशि के बराबर या बराबर न हो।
- कभी-कभी फ्रेम को छोड़ने के लिए डरो मत जब आप जानते हैं कि आप समय में अगली फ्रेम तैयार नहीं कर पाएंगे। एक परिवर्तनीय फ्रेम दर का उत्पादन करने के बजाय यह फ्रेम को छोड़ने के लिए और अधिक आकर्षक है।
- यदि आप एकल प्रोसेसर सिस्टम पर पृष्ठभूमि धागे से बच सकते हैं, तो उनसे बचें। कार्यकर्ता धागे का उपयोग करना वास्तव में आपके नींद समारोह की विश्वसनीयता को गड़बड़ कर देगा। सबसे अच्छा तरीका है कि अपने पृष्ठभूमि के काम को छोटे हिस्सों में विभाजित करें और सोने के बजाए यह काम निष्पादित किया जाए।
पहला लागू करने के लिए आसान है और एक सहायक समारोह में छिपाया जा सकता है। दूसरा थोड़ा और अधिक स्पर्शपूर्ण है क्योंकि आपको अन्य चीजों के साथ औसत प्रतिपादन गति के आंकड़े रखने की आवश्यकता होती है। तीसरा कार्यान्वित करना मुश्किल है क्योंकि यह अनुमान लगाने में अक्सर मुश्किल होती है कि अलग-अलग कार्यों में कितना समय लगेगा। यह केवल सामान्य बाधाओं के साथ वास्तविक समय प्रणाली में लागू किया जाता है।
- 1. फ्रेम दर को नियंत्रित करना या AVCaptureVideoPreviewLayer
- 2. ओपनजीएल फ्रेम दर
- 3. एंड्रॉइड गेम लूप, गति और फ्रेम दर को नियंत्रित करने के लिए कैसे करें
- 4. jQuery एनीमेशन की फ्रेम दर
- 5. QPainter प्रदर्शन उच्च फ्रेम दर
- 6. लाइन-दर-लाइन की बजाय वाक्य-दर-वाक्य फ़ाइलों को अलग करने का कोई तरीका है?
- 7. C# XNA कम फ्रेम दर
- 8. फ़्लैश प्लेयर जादुई फ्रेम दर
- 9. ओपनसीवी सटीक फ्रेम दर/गिनती
- 10. क्या एसिंक्रोनस विधि सिंक्रनाइज़ करने का एक सामान्य तरीका है?
- 11. संस्करण को मेरे SQL सर्वर संग्रहीत प्रक्रियाओं को नियंत्रित करने का सबसे अच्छा तरीका क्या है?
- 12. क्या UITableView scrollToRowAtIndexPath पर एनीमेशन को नियंत्रित करने का कोई तरीका है?
- 13. जावास्क्रिप्ट में संबंधित वस्तुओं को नियंत्रित करने का सही तरीका क्या है?
- 14. क्या HTML दस्तावेज़ में अनाथ शब्दों को स्वचालित रूप से नियंत्रित करने का कोई तरीका है?
- 15. क्या pygame में वेबकैम फोकस को नियंत्रित करने का कोई तरीका है?
- 16. यूनिटी 3 डी बाहरी कैमरा फ्रेम दर
- 17. डेटा फ्रेम को पार करने से बचने का सबसे अच्छा तरीका क्या है?
- 18. क्या प्रदर्शन रीफ्रेश दर प्रोग्रामेटिक रूप से प्राप्त करने का कोई तरीका है?
- 19. एक अवलोकन के उपभोग करने की "दर सीमा" का सबसे अच्छा तरीका क्या है?
- 20. क्या यह पता लगाना संभव है कि जावास्क्रिप्ट में मॉनीटर फ्रेम दर क्या है?
- 21. मूल्य को सामान्य करने का क्या अर्थ है?
- 22. एमवीसी 4 - क्या रूट को "सामान्य" अनप्रचारित HTML पृष्ठ पर रूट करने का कोई तरीका है?
- 23. क्या यह एक सामान्य ऑपरेटर == और ऑपरेटर <को लागू करने का एक सुरक्षित तरीका है?
- 24. क्या जुआनिट परीक्षण को लंबित के रूप में चिह्नित करने का कोई सामान्य तरीका है?
- 25. ffmpeg की कुंजी-फ्रेम पीढ़ी को कैसे नियंत्रित करें?
- 26. सी # - क्या सामान्य संग्रह डालने का कोई तरीका है?
- 27. ऑब्जेक्ट-फ़ील्ड प्रकार जीवन-चक्र को नियंत्रित करने का सबसे अच्छा तरीका कौन सा है?
- 28. एंड्रॉइड में वाईफाई स्कैन अंतराल को स्पष्ट रूप से नियंत्रित करने का कोई तरीका है?
- 29. ओपनएल में वोक्सल्स (क्यूब्स) को आकर्षित करने का सबसे प्रभावी तरीका क्या है?
- 30. क्या सामान्य लिस्प से पायथन पुस्तकालयों का उपयोग करने का कोई आसान तरीका है?
संभावित डुप्लिकेट: http://stackoverflow.com/questions/2940054/how-to-determine-the-best-framerate-setinterval-delay-to-use-in-a-javascript – INS