L'utilisation UIView et Quartz est avéré trop lent pour mon jeu 2DDans OpenGL ES sur iPhone, comment faire défiler deux images?
Répondre
En général en OpenGL, il existe deux façons de le faire « défilement », à savoir déplacer le contenu affiché perpendiculairement à la direction d'observation:
- Ajustez le visionnement, en d'autres termes "déplacez la caméra", afin que le contenu change.
- Déplacez le contenu directement, en gardant l'appareil photo fixe.
Ceux-ci sont bien sûr totalement équivalents, et inversement l'un de l'autre. Ces deux méthodes supposent que vous réalisez des retraits complets de votre scène pour chaque image. Faire défiler dans le sens le plus "classique", en copiant le contenu de la mémoire tampon de trame tout en étant décalé d'un montant (dx, dy), n'est pas une technique qui convient très bien à OpenGL. Fondamentalement, la création d'une image défilante pourrait être aussi simple que de dessiner un seul quad texturé, puis de changer sa position pour chaque nouvelle image.
Quelle est la taille de vos images et à quel point leur lenteur est-elle trop lente? En utilisant un UIScrollView avec un UIView contenant du contenu qui est dessiné via Quartz, j'ai pu faire défiler des vues jusqu'à 2000 x 2000. Si vous ne redessinez pas le contenu de votre image à chaque image, mais déplacez plutôt la position de vos vues et laissez Core Animation faire le reste, je parie que vous pourrez obtenir le type de performance que vous voulez sans tomber dans OpenGL.
La plupart des problèmes de performance en 2D que j'ai vus sont le résultat de personnes essayant de faire toute leur animation dans drawRect, en redessinant constamment leur contenu. Vous voulez dessiner une fois, puis déplacez simplement l'origine de la vue ou du calque dessiné. Le contenu de la vue est mis en cache en tant que texture OpenGL, il devient donc très efficace de l'animer.
Pour le travail en 2D, je considère OpenGL comme le dernier endroit vers lequel se tourner après avoir épuisé toutes les autres alternatives. Il vous faudra beaucoup plus de temps pour faire les mêmes choses que vous pouvez utiliser UIViews simples et Core Animation.
Merci pour ça. À l'heure actuelle, j'ai une minuterie appelant une fonction de mise à jour 30 fois par seconde. La fonction de mise à jour définit les nouveaux rectangles pour les mosaïques que j'ai définies en tant que vues. Avec cette méthode, l'iPhone tombe en dessous de 20fps une fois que le nombre de tuiles passe 20. J'apprécierais tout conseil. – Dimitris
Vous pouvez voir ma réponse à cette question: http://stackoverflow.com/questions/595922/how-do-i-prevent-core-animation-blocking-my-main-thread. N'utilisez pas les minuteurs et les fonctions de mise à jour, mais laissez Core Animation faire le travail pour vous. Vous seriez surpris de la performance que vous pouvez obtenir. –
Merci pour le conseil Brad. À la fin, nous avons décidé d'OpenGL! Cela signifie que nous pouvons garder notre logique de jeu. J'ai jeté quelque chose rapidement et j'ai obtenu 60 fps. À votre santé – Dimitris
- 1. Comment générer des images mipmap dans OpenGL ES?
- 2. Images de caméra iPhone comme textures OpenGL ES
- 3. iPhone OpenGL ES 2d texture d'arrière-plan
- 4. Comment faire pour déboguer OpenGL ES se bloque?
- 5. iPhone OpenGL ES mélange alpha incorrect
- 6. OpenGL à OpenGL-ES - glBegin();
- 7. Comment rendre une image avec OpenGL ES?
- 8. Opengl ES - Rendu incorrect sur l'axe z?
- 9. Notions élémentaires de la texture 2D pour iPhone OpenGL ES
- 10. OpenGL ES profondeur tampon
- 11. Défilement dans Open GL ES
- 12. Grand fond de défilement dans OpenGL ES
- 13. transition Vue personnalisée dans OpenGL ES
- 14. OpenGl ES scrollable ListBox problème de clipping
- 15. Configuration de glFrustumf dans OpenGL ES
- 16. Existe-t-il une API pour dessiner des statistiques dans OpenGL ES sur iPhone OS?
- 17. Problèmes glTexCoordPointer avec OpenGL ES
- 18. Zoom avant et arrière dans OpenGl ES
- 19. Comportement étrange d'OpenGL ES dans l'application iPhone
- 20. Comment implémenter l'effet de surface océanique avec OpenGL ES 1.1?
- 21. Puis-je continuer à faire de la programmation orientée objet en utilisant OpenGL ES sur iPhone OS?
- 22. OpenGL me donnera-t-il une amélioration FPS sur CoreAnimation pour faire défiler une grande image?
- 23. Quel est le format de données de vertex préféré pour OpenGL ES sur iPhone OS?
- 24. Comment puis-je rendre des réflexions dans OpenGL ES sur l'iPhone sans tampon stencil?
- 25. Tracer une ligne blanche en opengl es
- 26. comment faire pivoter/faire défiler le sélecteur avec un film dans scrollview dans iphone sdk 3.0?
- 27. Objets de tampon Frame OpenGL ES + Android
- 28. Comment faire défiler en douceur dans UIScrollView?
- 29. Le moyen le plus efficace pour dessiner des pixels individuels dans OpenGL ES (Cocos2d-iphone)
- 30. Actionscript - faire défiler les images de gauche à droite
Avez-vous un échantillon de code? – Dimitris
Non, je suis désolé ... Cela fait longtemps que je n'ai pas écrit de code GL. :/ – unwind