Effet d'eau avec scanline

Soyez le premier à donner votre avis sur cette source.

Vue 8 616 fois - Téléchargée 1 313 fois

Description

et oui, après effet d'eau avec getdibits, voilà effet d'eau avec scanline.
aussi rapide mais plus simple.
J'ai par ailleurs modifié quelques petites choses dans le code comme la gestion du déplacement des cailloux qui créent des vagues plus grosses.
et pour faire des ronds dans l'eau il faut cliquer sur l'image, sinon, il y a rien.
Pour rappeler l'effet, on a deux tableau qui contiennent la hauteur de l'eau à un endroit donné.
Le premier à l'instant T et le deuxième à l'instant T-1.
Puis un applique le filtre suivant :
pour chaque (X,Y)
on addition la hauteur des huit cases voisines au temps T. On divise par 4 et on retranche la hauteur au temps T-1 de (X,Y)
Et on applique un coefficient <1 pour que les vagues s'arretent peu à peu.

Puis pour chaque pixel de l'image, on regarde après réfraction de l'eau vers quelle endroit du fond on regarde.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
5
Date d'inscription
mercredi 12 janvier 2005
Statut
Membre
Dernière intervention
22 juillet 2010

c'est mieux c'est tu ajoute DoubleBuffered := True ;-)
@+
Messages postés
400
Date d'inscription
samedi 6 août 2005
Statut
Membre
Dernière intervention
11 février 2016
1
aie aie aie aie : Pourquoi tu décompes Barbichette ? je blagues ^^.

Non il y a deux beugs :
1)Si tu saisit 1 (chose que l'on peut faire) dans SEforce, tu as le droit a une bonne grosse exception pointant.

2) Si tu saisit 5000 : tu as une grosse trame noire au fond qui apparait (et elle est bien visible).

Je me souviens pas de la première version mais il me semble que ca ramait moins (car là ca rame un ptit peu beaucoup quand même). Je me trompe peut etre de raison mais je trouve cette version moins bleuffante que la première. : est ce pour ca j'en sais rien.

Par contre c'est drolement instructif comme code (puis c'est bien indenté ;)).

@+
Messages postés
18
Date d'inscription
mercredi 8 novembre 2006
Statut
Membre
Dernière intervention
31 janvier 2008

Naalsoo :)) Sieht schon viel besser aus.

Habe noch "eine" Bitte (um Zeilen 427-432):
5 Mal "rect(1,1,wi-2,he-2)"
kann man doch irgendwie aufmotzen, oder?
Messages postés
243
Date d'inscription
lundi 30 octobre 2000
Statut
Membre
Dernière intervention
15 juillet 2013

ben voilà, j'ai pris un peu de temps pour optimiser le tout.
Juste un truc, pour les "shr 2" à la place des "div 4", c'était pas toujours possible puisqu'on travail avec des nombres signés. En assembleur pas de souci puisqu'on peut faire des "sar 2". Mais en pascal, on n'est obligé de passer par des div.
De même pour les tableaux, j'ai rendu les calculs soit en dehors des crochets, soit en chageant le code et en faisant des additions.

Merci a tous
Messages postés
18
Date d'inscription
mercredi 8 novembre 2006
Statut
Membre
Dernière intervention
31 janvier 2008

je n'ai pas vérifié en détail... mais il y a bcp de calculs répetitifs qui doivent pouvoir se rationaliser.

ex. 1:
# nw:=((vagues[cp+wn-wi-1]+
# vagues[cp+wn-wi ]+
# vagues[cp+wn-wi+1]+
# vagues[cp+wn -1]+
# vagues[cp+wn +1]+
# vagues[cp+wn+wi-1]+
# vagues[cp+wn+wi ]+
# vagues[cp+wn+wi+1]) div 4)-vagues[sp+wn];
=> il y a 8 fois le calcul cp+wn ou encore il y a 3 fois les calculs "cp+wn+wi" et "cp+wn-wi"
En utilisant des vars supplementaires, on devrait gagner un peu, non?

ex. 2:
les indexages à "img" sont assez fréquents.
Il est peut-être possible d'améliorer la vitesse.
Considérant "result:=im[x+(he-y)*wi];" (ligne 105):
=> créer un tableau suppl. dans lequel on a précalculé les combinaisons possibles c.a.d.
for x:=0 to wi do for y:=0 to he do TabSuppl[x,y]:=x+(he-y)*wi;
et après on obtient
result:=im[TabSuppl[x,y]];
ce qui économise 2 additions et une multipl.

et

"im[i+(2*he-j-1)*wi]:=getpix(dx,dy);"
peut être traité de la même manière :)


ex.3:
je n'ai tjs pas vérifié ;) le code assembleur produit, mais je propose que toooouuus les "*2" et les "div 4" etc... soit remplacés par
"*2" => shl 1
"div 4" => shr 2


Sinon: moi j'aime bien les vagues :))
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.