Défilement / zoom d'une scène dans OpenGL et subdivision

Nous devons développer une scène de défilement / zoom dans OpenGL ES sur Android, beaucoup comme un niveau dans Angry Birds mais plus comme un niveau dans World Of Goo. Plus semblable à celui-ci, car le monde ne comportera pas de couches répétées dans Angry Birds mais d'une grande image. Comme la scène doit faire défiler / zoomer et donc beaucoup ne seront pas visibles, je me demandais le moyen le plus efficace d'implémenter le rendu, en mettant l'accent uniquement sur l'environnement (c'est-à-dire pas les objets dans le monde mais les couches de fond).

Nous allons utiliser une projection orthographique.

  • Coller à partir de AccessibilityService fonctionne dans API22 ne fonctionne pas dans API17
  • Le glissement horizontal n'est pas détecté dans le parent de ScrollView
  • Comment obtenir la fonctionnalité de connexion google plus sur son propre bouton dans Android
  • Comment dire à mon patron de travailler avec Xamarin ne le fera plus vite
  • Pourquoi MediaPlayer montre-t-il tant de Verbose Connectez-vous sur Android?
  • FFmpeg exemple de code pour créer un fichier vidéo à partir d'images fixes JNI Android
  • Le premier qui vient à l'esprit est la création d'un grand rectangle de 4 verbes à la taille du monde, qui a la texture d'arrière-plan qui lui est mappée, et traduit / balayez ceci en utilisant glTranslatef / glScalef. Cependant, je me demandais si la zone non visible à l'extérieur des limites des écrans est toujours rendue par OpenGL car elle n'est pas abattue (vous perdriez la zone visible ainsi que seulement 4 sommets). Par conséquent, serait-il plus efficace de subdiviser ce rectangle, de sorte que des rectangles plus petits non visibles peuvent être abattus?

    Une autre option créerait un rectangle de 4 vertices qui remplirait l'écran, puis déplacerait l'arrière-plan en ajustant ses coordonnées de texture. Cependant, je pense que nous aurions des problèmes lors de la construction de grands mondes, compte tenu de la limite de taille de texture. Cela semble être une bonne implémentation pour des antécédents répétés comme AngryBirds.

    Peut-être y a-t-il une autre façon …?

    Si quelqu'un a une idée de comment cela pourrait être fait dans AngryBirds / World of Goo, partagez comme j'aimerais entendre. Ils semblent avoir mis en place un système qui permet au monde d'être déplacé et zoomé très (WorldOfGoo = TRÈS) en douceur.

  • Comment obtenir la typicité par défaut de l'appareil Android?
  • Mipmap drawables pour les icônes
  • Android: Comment détecter "Activer le stockage USB" Broadcast?
  • Deux fragments dans une page de parvis
  • ORMLite ne charge pas les champs étrangers
  • Comment cloner un objet dans Android?
  • 3 Solutions collect form web for “Défilement / zoom d'une scène dans OpenGL et subdivision”

    C'est probablement votre meilleur pari pour la mise en œuvre .

    Selon mon expérience, garder une grande texture dans la mémoire est très coûteux pour Android. J'aurais quelques exceptions OutOfMemoryError pour la texture de fond avant de passer au carrelage.

    Je pense que le plus grand goulet d'étranglement de rendu serait avec les vitesses de transfert de mémoire et le taux de remplissage au lieu de tout calcul graphique.

    Edit: Consultez 53:28 de cette présentation de Google I / O 2009.

    Vous pouvez diviser le rectangle d'arrière-plan en rectangles plus petits, de sorte que OpenGL rend uniquement les rectangles visibles. Vous ne disposerez pas d'un gros rectangle d'âne avec une grande texture d'âne chargée, mais des rectangles plus petits avec des textures plus petites que vous pourriez charger / décharger, selon ce qui est visible à l'écran …

    Afaik, il n'y aurait pas de baisse de performance en raison du fait que de vastes zones sont rendues hors écran, la subdivision et l'abattage se font normalement uniquement pour réduire le nombre de verbes, mais vous y ajouteriez.

    Mettre de côté pour l'instant; De la façon dont vous avez formulé la question, je ne sais pas si vous avez une grande texture de fond ou une petite répétition. Si elle est grande, alors vous devrez subdiviser en raison des limites de taille de texture de toute façon, donc la question est discutable! Si elle est petite, je suggérerais la deuxième méthode, monter un quadrant sur l'écran et déplacer l'arrière-plan en changeant les coordonnées de la texture.

    Je pense que j'ai peut-être manqué quelque chose, car je ne sais pas pourquoi vous avez mentionné le problème de limitation de la taille de la texture lorsque vous parlez de la méthode de coordonnées de texture et non de la grande méthode quadruple. Certes, pour les deux, ce n'est pas un problème pour la répétition des textures, car vous pouvez utiliser le mode enveloppement GL_REPEAT …

    Mais pour les deux, c'est un problème pour une seule grande texture, sauf si vous subdivisez, ce qui rendrait la tactique de coordonnées de texture plus compliquée que nécessaire. Dans ce cas, la subdivision du maillage selon les subdivisions de texture serait préférable et l'élimination des sections hors écran. Décider quelles parties à abattre devrait être trivial avec cette technique.

    À votre santé.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.