OpenGL ES. Faire défiler les textures 3 couches de starfield m’obtient entre 60 - > 40 FPS

StackOverflow https://stackoverflow.com/questions/1627418

Question

Je dois dessiner l’arrière-plan d’un tireur à défilement spatial en 2D. J'ai besoin de mettre en œuvre 3 couches d'étoiles: une nébuleuse distante (se déplaçant très lentement) à l'arrière-plan, une couche d'étoiles lointaines (se déplaçant lentement) et une couche d'étoiles proches (se déplaçant normalement) au-dessus des deux autres.

Pour la première fois, j’ai essayé d’utiliser 3 textures de 320 x 480 qui étaient des images transparentes des étoiles. J'ai utilisé GL_BLEND et SRC_ALPHA, ONE_MINUS_SRC_ALPHA.

Les résultats n’ont pas été excellents même sur la 3GS. Sur les appareils de la première génération, le FPS est tombé à 40..50, je pense donc que je ne le fais pas correctement.

Lorsque je désactive le GL_BLEND, tout fonctionne parfaitement, même sur les appareils de la 1re génération et le FPS est de nouveau à 60 ... il faut donc que j'essaye de créer de grandes textures transparentes.

Le problème est que je ne sais pas comment le faire d'une autre manière ...

Dois-je ne dessiner que la première nébuleuse comme une texture opaque, puis essayer d'imiter les couches d'étoile du milieu et du haut avec de petits points se déplaçant autour de l'écran?

Existe-t-il une autre approche sur le problème des mélanges? Comment puis-je accélérer le processus de rendu? Une seule texture (tileset) est-elle la solution?

S'il vous plaît aidez-moi parce que je suis coincé ici et je ne peux pas sortir.

Était-ce utile?

La solution

Je ne sais pas comment vous voulez que vos étoiles ressemblent, mais vous pouvez essayer de les déplacer d'une texture à une géométrie en utilisant GL_POINTS dans DrawElements ou DrawArrays peut-être simplement remplacer les deux couches supérieures par des couches de géométrie. Vous pouvez manipuler les points en utilisant PointSize , PointSizePointerOES et PointParameter pour modifier le rendu des points.

Autres conseils

Vous pouvez utiliser plusieurs textures pour voir si cela accélère les choses. Chaque matrice à textures multiples peut se voir attribuer une matrice de transformation unique. Vous devriez donc pouvoir traduire chaque couche à des vitesses différentes.

Je pense que tous les modèles d’iPhone prennent en charge deux niveaux de texture. Par conséquent, vous devriez pouvoir combiner deux de vos calques en un seul appel de dessin. Vous devrez peut-être encore recourir au mélange pour la troisième couche.

Notez également que les tests alpha pourraient être plus rapides que les mélanges alpha .

Bonne chance!

La nébuleuse dorsale devrait certainement être opaque; tout le reste se dessine dessus, et je suppose que la seule chose derrière cela est le noir. De plus, prideout a un point: présumer que vos couches d'étoiles peuvent avoir un alpha de 1 bit, c'est vraiment quelque chose que vous pouvez essayer. A défaut, la technique GL_POINTS mentionnée par Harald fonctionnerait également.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top