2008-10-07 10 views
3

Je travaille sur un jeu iPhone qui se déroule à la surface de l'océan. Quelqu'un peut-il recommander un exemple de code ou des tutoriels pour la mise en œuvre des vagues ou des ondulations dans OpenGL? Au moment où j'écris ces lignes, l'iPhone ne supporte que OpenGL ES 1.1, donc il n'y a pas de support pour les shaders ou autres effets fantaisistes.Comment implémenter l'effet de surface océanique avec OpenGL ES 1.1?

Je n'ai pas besoin de quelque chose d'extraordinaire. Je n'ai pas besoin de reflets, par exemple. Je ne veux pas surtaxer l'appareil. J'ai juste besoin de quelque chose qui ressemble à un océan. (Mais ce serait bien si elle était aussi belle que Koi Pond.)

Répondre

3

L'iPhone ressemble beaucoup à un GPU de 1999 en fonctionnalités (par exemple NVIDIA Riva TNT 2). Ainsi, vos options les plus réalistes ne font que mélanger plusieurs textures défilantes.

E.g. avoir une texture avec un "motif d'onde". Réglez-le en deux étapes de texture, et faites défiler les deux dans différentes directions/vitesses (via une matrice de texture). La texture de configuration combine pour ajouter les textures ensemble pour le résultat final (ou faire une autre opération, des tonnes de possibilités ici).

3

Additionner termes de la forme:

a * sin(b * x + c * y + d * t) 

Chacun de ces terme produit un ensemble de forage des ondes rectilignes de cette façon: a est l'amplitude (hauteur) ont contribué par ces ondes, b et c contrôle la direction relative et la fréquence (espacement) des ondes, et d décale les ondes dans cette direction lorsque t (l'heure simulée) change.

Expérimenter avec quelques termes de cette forme, en maintenant la constante t, pour obtenir une surface ondulée. Vous pouvez ensuite "régler" les coefficients pour obtenir le degré de rugosité que vous aimez. Une fois que vous avez trouvé quelques ensembles de coefficients dont vous êtes satisfait, laissez t varier pour le mettre en mouvement.

+0

Où mettriez-vous cette formule en code? Quel est le résultat? Une image ou quoi? – Thanks

+0

Pour les a, b, c et d fixés, cette formule indique la hauteur à un instant t et à un endroit donné (les coordonnées x et y). Un ensemble de telles formules (avec des valeurs a, b, c et d différentes pour chaque) donne des hauteurs de composantes d'onde en mouvement; les ajouter donne une hauteur totale. La conversion des hauteurs en image dépend de la perspective. Pour une vue directe depuis le haut, il suffit de mapper la gamme de hauteurs à une gamme de couleurs bleu-vert. Le rendu basé sur la perspective nécessite des opérations matricielles (trop complexe pour ce champ de commentaire! ;-) –

Questions connexes