2010-09-05 28 views
3

J'ai besoin de quelques conseils rapides.Format de texture pour les automates cellulaires dans OpenGL ES 2.0

Je voudrais simuler un automate cellulaire (à partir de A Simple, Efficient Method for Realistic Animation of Clouds) sur le GPU. Cependant, je suis limité aux shaders OpenGL ES 2.0 (en WebGL) qui ne supportent pas les opérations au niveau du bit.

Puisque chaque cellule de cet automate cellulaire représente une valeur booléenne, stocker 1 bit par cellule aurait été l'idéal. Alors, quel est le moyen le plus efficace de représenter ces données dans les formats de texture d'OpenGL? Y a-t-il des astuces ou devrais-je simplement coller avec une texture RGBA directe?

EDIT: Voilà mes pensées jusqu'à présent ...

En ce moment je pense à aller avec soit GL_RGBA8 plaine, GL_RGBA4 ou GL_RGB5_A1:

  • Peut-être je pourrais choisir GL_RGBA8 et essayez d'extraire les bits d'origine à l'aide des opérations en virgule flottante. Par exemple. x*255.0 donne une valeur entière approximative. Cependant, extraire les bits individuels est un peu douloureux (c'est-à-dire en divisant par 2 et en arrondissant quelques fois). Aussi, je me méfie des problèmes de précision. Si je prends GL_RGBA4, je pourrais stocker 1.0 ou 0.0 par composant, mais alors je pourrais probablement essayer le même tour qu'auparavant avec GL_RGBA8. Dans ce cas, c'est seulement x*15.0. Je ne sais pas si ce serait plus rapide ou ne pas voir car il devrait y avoir moins d'opérations pour extraire les bits mais moins d'informations par texture lues. En utilisant GL_RGB5_A1 Je pourrais essayer de voir si je peux regrouper mes cellules avec des informations supplémentaires comme une couleur par voxel où le canal alpha stocke l'état de cellule de 1 bit.

Répondre

1

Créez une deuxième texture et utilisez-la comme table de correspondance. Dans chaque bloc 256 x 256 de la texture, vous pouvez représenter une opération booléenne où les entrées sont représentées par la ligne/colonne et la sortie est la valeur de la texture. En fait, dans chaque texture RGBA, vous pouvez représenter quatre opérations booléennes par région 256x256. Méfiez-vous de la compression de texture et des cartes MIP, bien que!

+0

Cela ressemble à une idée intelligente, merci. Je vais l'essayer! –