begin process at 2012 02 11 19:52:53
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

OpenGL

 > WAVE EFFECT EN OPENGL [VC++ 6.0]

WAVE EFFECT EN OPENGL [VC++ 6.0]


 Information sur la source

Note :
9 / 10 - par 3 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :OpenGL Niveau :Débutant Date de création :11/12/2003 Date de mise à jour :13/12/2003 13:55:43 Vu / téléchargé :6 874 / 1 289

Auteur : djl

Ecrire un message privé
Commentaire sur cette source (55)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
c'est un effet qui fait onduler une texture suivant une fonction sinusoidale(cosinus dans cet exemple)

on peut voir l'eau bouger dans la piscine, et un effet genre rideau de latte(lol je sais pas trop)

enfin c'est boooooo


 Conclusion

compilé avec visual c++ 6.0

commandes :
deplacements ==> fleches + souris
activer/désaciver wave effect ==> espace
activer/désaciver mode filaire ==> L

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip COS ET SIN PLUS RAPIDE QUE MATH.H
Source avec Zip Source avec une capture [C++/DEVCPP] EXPLORATEUR EN OPENGL
Source avec Zip Source avec une capture TABLEAU 2D GENERIQUE MATRICE...
Source avec Zip CLASSE PILE&TABLEAU GENERIQUE
Source avec Zip Source avec une capture PETIT DOOM LIKE EN OPENGL [VC++]

 Sources de la même categorie

Source avec Zip Source avec une capture AFFICHER DES COURBES DE BEZIER par shorzy
Source avec Zip Source avec une capture BASE/MOTEUR 3D EN QT/OPENGL (COMPLET ET FONCTIONNEL!) POUR U... par envi33
Source avec Zip Source avec une capture CLASSE AVEC OPENGL - OBJETS 3D ET ANIMATIONS par rasta63
Source avec Zip Source avec une capture LETTRES 3D AVEC OPENGL ET QT par opossum_farceur
Source avec Zip CUBE 3D GLUT32 VC++ ET DEVC++ par bobby03

Commentaires et avis

Commentaire de zanidip le 12/12/2003 10:24:31

tres tres beau! seul probleme: sur mon PC c'est pas fluide du tout,meme tres sacadé

Commentaire de Kirua le 12/12/2003 14:33:33

lol, pas fluide pr de l'eau c'est plutôt génant ^^
ben je le trovue sympa ton effet! l'eau est pas malle, c complètement irréaliste mais modéliser de l'eau c hyper dur! moins j'aime bien :-)

Commentaire de djl le 12/12/2003 18:37:24

merci pour ces commentaires ;)
comme d'hab ca rame(je m'en rend pas compte car chez moi avec un xp1600+ et une gf 3 je suis constament a 86fps) mais je vais essayer d'arranger ca quand meme.

Commentaire de djl le 12/12/2003 19:45:40

avec cette maj, on peut enlever et refoutre l'effet (en appuyant sur espace), j'aimerais savoir si c'est fluide sans, merci

Commentaire de Saros le 12/12/2003 19:49:19

J'ai encore un blocage à 60 Fps (VSync)... Il ne veut pas aller au dessus... Mais bon il n'y a pas de quoi se plaindre.
L'effet est vraiment bien fait... Si tu veux, j'ai vu quelque part une formule qui calcule la hauteur d'un surface simulant le Wave Effect, en amortissant au fur et à mesure (cité) :
"Y = exp( -w * t) * sin(Omega * t)
Où w est le coefficient d'amortissement et Omega la période de l'onde"
't' doit être la distance au point où on fait tomber la goutte. La hauteur est nulle pour t négatif, et à chaque fois t est incrémenté.
Je ne sais pas exactement comment implémenter ce code, car à vrai je viens de commencer le C++ il y a deux semaines, et mon niveau assez bas.
9/10
Saros

Commentaire de djl le 12/12/2003 20:26:31

tien ca m'interesse ton truc Saros, tu parle de goutte, ca serait pas le fameux truc de la goutte qui tombe? en tout cas pense a moi si tu retrouve l'url pense a moi

Commentaire de Kirua le 12/12/2003 21:16:55

ah ouais les gouttes qui tombent, le truc là, euh... ah ouais la pluie! ouais j'ai ça tt le temps ds mon pays, c'est strange!

( ;-) )

Commentaire de djl le 12/12/2003 21:31:52

en france, avant la meteo on avait un petit spot en image de synthese montrant une goutte tombant dans la flotte(avec effets d'ondulation et tout le reste...) lol,je sais meme pas pourquoi je dit ce genre de connerie

on m'a dit que si ca ramais, ca ve dire que la carte graphique fait defaut, donc pour ceux pour qui ca rame, vous avez quoi comme carte?

Commentaire de Kirua le 12/12/2003 21:44:25

en tt cas chez moi c impeccable et j'ai une nVidia GeForce3 Ti200

Commentaire de djl le 12/12/2003 21:59:05

tien ca me rasssure ca, c'est MCR_STEPH qui me l'avai confirmer
de toute facon, ya aucune optimisation a faire sur un terrain aussi petit

Commentaire de Saros le 13/12/2003 00:26:11

J'ai vu ça dans un livre pour la programmation DirectX9, il donnent plein de formules dans le genre développements limités de Taylor, etc... et il y a entre autres cette formule.
J'entend par goutte, non pas la pluie, mais en gros un élément perturbateur. Ca simule en quelque sorte l'effet qu'aurait eu une goutte si elle était tombée à un endroit. Mais je pense qu'il doit y avoir un tas de documentation dessus sur le net... Je vais essayer d'étudier un programme qui met en oeuvre ce genre de WaveEffect (j'ai bien dit essayer, parce que c'est fait avec des Vertex Shaders...) et je te tiendrais au courant...
Saros

Commentaire de djl le 13/12/2003 14:00:39

j'ai ajouter look up/down avec la souris pour mieux admirer l'effet, et on peut passer en mode filaire en appuyant sur L.

le mode filaire peu aider a comprendre comment ca fonctionne, la la surface qui ondule est en fait diviser en plusieurs sous surfaces, et pour le cas de l'eau(sur le plan oxz), c'est juste la hauteur en y de chaque vertex qui varie suivant une fonction sinusoidale et en fonction de sa position.

Commentaire de zanidip le 14/12/2003 10:49:08

en fait si c'est fluide (au debut j'avait essayé avec les pcs du cdi sans carte graphique.)
c'est clair c'est pasmal du tout...

Commentaire de Funto66 le 14/12/2003 15:06:19

32 FPS sur mon ATI Rage Pro
L'effet est pas mal je trouve, mais c'est vrai que reproduire de l'eau c'est certainement un des trucs les + durs en prog.
Je précise pour ceux qui n'auraient pas remarqué : pour passer en mode filaire le il faut faire un L majuscule.

Commentaire de djl le 14/12/2003 19:27:14

a bon? moi quand j'appuye sur L sa marche

sinon 32 fps je trouve ca pas mal,(c'est mieux qu'avant il me semble?)
sans aucunes optimisations
ta carte est vielles, je confondait avec une fury, alors qu'en fait c'est encore plus vieux, donc tout va bien! (je deconne :-) )

Commentaire de Funto66 le 14/12/2003 20:22:52

Ben en fait je sais pas trop ce qu'elle vaut vraiment; elle arrive quand même à faire tourner Need for speed 4 et Counter-Strike...
D'après le panneau de configuration, c'est une, je cite : "Rage Fury/Xpert 128/Xpert 2000". Le pilote date de 99 et il me dit qu'il a 32 Mo de SDRAM.
Alors, c'est bien ou c'est pas bien? lol

Commentaire de Kirua le 14/12/2003 21:51:50

32Mo de ram ?? ben je pense que c'est pas mal du tout, Prince of Persia 3D tourne avec 8Mb de ram carte graphique. les actuelles abordables (= pour les gens qui sont pas PDG de Universal) plafonnent à 128 il me semble.

Commentaire de djl le 14/12/2003 21:59:35

ya pas que la quantite de memoire qui compte, une rage fury est beaucoup moins performante qu'une geforce 2 gts qui a aussi 32 meg de vram!

Commentaire de Kirua le 14/12/2003 22:02:47

j'ai pas dit le contraire djl, c'est complexe ces petits machins, et c'est bien pr ça que ça coûte si cher.

Commentaire de Funto66 le 15/12/2003 21:43:59

Arf ça vaut même pas une GeForce 2 alors :(
snif...

Commentaire de ypikai le 16/12/2003 12:05:27

Moi j'ai surtout vu un truc ça ne dépend pas des perfs de la carte graphique c le proc qui se prend tout dans le gueule pour optimiser ton code faut que tu évites de te servir des fonctions cos et sin de base qui sont tout sauf optimisées...
Bon courage @+

Commentaire de djl le 16/12/2003 12:32:32

mais comment je pourrai faire pour obtenir une belle sinusoide sans utiliser cos et sin?

Commentaire de Kirua le 16/12/2003 15:53:21

I wonder how... (musique)

Commentaire de Funto66 le 16/12/2003 18:17:35

Bah de toutes façons mon processeur est pourri aussi :p
Pour ce qui est de sin et cos, ce qui est fait la plupart du temps c'est l'utilisation de "tables de références" : entre telle valeur et telle valeur la fonction mon_cos() renvoie telle valeur...etc
Le résultat est approché, la technique est "bourrin" mais t'évites plein de calculs et t'économises pas mal de temps processeur.

Commentaire de Kirua le 16/12/2003 23:14:42

hmm, et tu as une jolie switch compilée en dur, beuuuuuurk, c'est pas beau ton truc!

Commentaire de djl le 16/12/2003 23:24:36

tu fait un tableau de structure (intervalle debut,intervalle fin,valeur retourné}, ces structures sont ranger dans l'ordre croissant pour couvrir l'intervalle {-1,1}, ta juste a faire une fonction qui par un cacul simple(genre un modulo+une addition) te retourne l'index dans le tableau en fonction du parametre

Commentaire de Kirua le 16/12/2003 23:32:24

j'ai pensé à un truc du genre après avoir posté mon message, j'avais ça:

imaginons qu'on veuille une précision au dixième de degré, on réservé donc un tableau de 'double' comme ceci:

double *Sinus = new double[3600];
for(int i=0; i < 3600; i++)
Sinus[i] = sin(tantodeg(i));

ou tantodeg() est une fonction (inline) qui convertit les radians en degrés.

après, pour connaître le sinus de l'angle 36,8°, on fait:

Sinus[36,8 * 10]

mais alors ds une situation réelle il faut faire un cast int sur l'indice, ce qui ferait un truc du genre:

double angle = .......;
double sinangle = Sinus[(int)(angle*10.0)];

mtnt, je vois pas trop la différence avec ton truc, tu saurais me réexpliquer stp? :-)

Commentaire de djl le 16/12/2003 23:38:12

c'est la meme chose sauf que c'est mieux comme tu fait, cependant pour le cast t'en fait pas et c'est pas non plus la peine de stocker 3600 valeurs(du moin dans cet exemple, une centaine de valeurs suffirait)

Commentaire de Kirua le 17/12/2003 02:07:45

je sais pas pq j'ai écris tantodeg ... je voulais dire radtodeg.

mais... est-ce que ça aiderait vrmnt de faire ça? regarde, imaginons qu'on utilises des float plutôt que des double, on a:

3600 * 4 = 14Ko environ, ça fait un gros tableau !!

je me demande si c'est bien nécessaire.

Commentaire de ypikai le 17/12/2003 17:51:29

Bah vu la taille des mémoires des PC actuels faut peut être pas trop non plus déconner... d'autant plus qu'en 3D la majeure partie du code réside dans l'optimisation (que ce soit de l'affichage ou du reste) et honnêtement je crois qu'une précision au degré près, dans ce cas là en tout cas, est très largement suffisant après il faut voir si tu veux intégrer cet effet dans un jeu ou autre chose de plus complexe ou si tu veux simplement en faire une petite démo..

++

Commentaire de djl le 17/12/2003 21:03:28

je repete =, pas besoin d'une tel precision pour un tel effet, 100 valeurs suffit largement, en fait pour etre precis je devrai avoir besoin theoriquement de 30 racine de 2 valeurs(env 45) (la texture est divisé en 30*30 carre et le cos se fait en chaque point suivant la diagonale)

Commentaire de Funto66 le 17/12/2003 21:27:27

Kirua >> J'ai jamais précisé dans mon msg qu'il y avait un gros switch tout dégueulasse...
Je savais qu'il y avait une histoire de tableaux mais je ne suis pas allé chercher + loin (flemme :p).
Et puis 14 Ko c'est lragemet acceptable : ils sont alloués dans la RAM, et même moi j'ai 128 Mo de RAM donc je pense pas que ça gêne un PC actuel ^^
D'autant plus qu'apparemment on n'a pas besoin de + de précision.
Pour ce qui est de la conversion radians/degrés on pourrait aussi travailler direct en radians ça serait pas plus mal (le pb c'est que les glRotate d'OpenGL fonctionnent en degrés :()

Commentaire de Lightness1024! le 29/12/2003 14:47:31

saros la formule dont tu parles c la solution de l'equation differentielle d'ordre 2 qui caractérise un oscillateur harmonique à amortissement faible.

(régime pseudo périodique)

Commentaire de Saros le 31/12/2003 00:41:33

Je ne saurais pas te confirmer, je l'ai prise dans un livre sur la programmation 3D, qui la donnait en exemple précisément pour faire du wave effect. Reste à savoir comment s'applique-t-elle, je ne connait pas la réponse (malheureusement, le livre en question ne donne aucune information.)
Saros

Commentaire de Lightness1024! le 31/12/2003 01:02:43

je me doutait bien qu'il n'expliquait rien de plus.
c'est pour ca un peu que "j'etale ma science".
je dévoile les origines de la formule.

pour l'aplication en fait la formule retourne l'amplitude du mouvement en fonction du temps.
par exemple, un ressort avec une masse pendue au bout, tu tires, tu laches, le point aura une position dans l'espace décrite par cette formule. c'est ce qu'on appelle un oscillateur harmonique. (ca existe aussi en electricité, dans les circuits RLC)

pour l'eau ca doit pouvoir s'appliquer aussi je pense car il ne s'agit que d'un facteur à ajouter, et il est tres simple a comprendre, c'est une exponentielle décroissante.

Commentaire de Funto66 le 31/12/2003 16:03:59

Lightness1024!, je comprends rien :'( !

Commentaire de Lightness1024! le 31/12/2003 17:18:13

ah ?

c dommage parce que c'est des choses bien utiles :)

toute facon c'est des trucs qui s'apprennent. entre Bac+0 et Bac+1 pour les oscillateurs (en tout cas dans mon cas)
et premiere scientifique/technologique/eco... pour l'exponentielle.
et college (4eme ou 3eme) pour les sinus et cosinus.


donc t'inquete pas, si ta pas arreté les études tu apprendras et comprendras tout ca !

Commentaire de Kirua le 01/01/2004 17:08:44

lol, je pense que Funto va continuer ses études, y a des chances quoi ^^ puis je pense même que ça risque d'être en plein dans ce sujet.

Commentaire de Saros le 03/01/2004 17:30:55

À vrai dire (après avoir demandé conseil à quelqu'un), on m'a fait comprendre que t correspondait toujours au temps écoulé et que, comme l'onde mettre un temps plus ou moins long à parvenir à un point plus ou moins éloigné de l'endroit d'où elle part, il n'y a nul besoin d'intégrer encore une fois la distance dans son calcul...
Je ne sais pas si je me suis bien clairement exprimé, mais bon...
Il y a dans le SDK DirectX9 un exemple de Wave Effect très franchement excellement bien réussi, avec effet de réfraction, reflets etc... Si tu veux le code source pour l'analyser et peut-être le convertir en OpenGL, donne-moi une adresse où je pourrais te l'envoyer.
Saros

Commentaire de Funto66 le 03/01/2004 21:42:28

Tiens on parle de moi ^^

Commentaire de Saros le 03/01/2004 22:26:13

À vrai dire, j'avais demandé à ma soeur (maths sup-spé-5/2 puis fac de physique) qui m'a aussi fait remarquer que c'était les vacances :b
Le code source dont je parle est franchement d'un niveau époustouflant et l'effet est plus que convaincant... Ceux qui ont fait le SDK sont vraiment des masses pures...
Saros

Commentaire de Lightness1024! le 03/01/2004 22:58:30

ben oui, c les memes gens qui programment windows d'ailleur.

Commentaire de sitesref le 08/02/2004 20:14:56

chez moi ça tourne comme une horloge. pour le mvt de l'eau tu utilises en fait un système de cosinus simple mais avec un système double ou triple il doit y avoir moyen de complexifier le mvt de l'eau (qui reste cepdant un des trucs dont le mvt est le plus dur à modeliser, ça c'est clair...)

Commentaire de djl le 08/02/2004 20:22:03

ben en fait une sorte de consinus multi directionnelle, faire varier la hauteur des sous surfaces selon leur position par rapport au centre, ca ferait l'ondulation comme quand une goutte tombe dans l'eau, ca doit pas etre trop complique...

Commentaire de Kirua le 08/02/2004 21:12:26

moi je dis, le tout c'est de faire une simulation physique :-) je suis assez fan de ce genre de trucs :-P le mouvement paraît souvent très complexe, limite chaotique, mais depuis Galilée, on sait que les mvmnts peuvent svt être séparés en plusieurs "composantes", et depuis Newton, on a un super truc facile à coder qui est la dynamique: tu crées ta classe vecteur 3D en béton pour représenter les forces et les vitesses, et à partir de là tu peux bien plus aisément obtenir des résultats dont tu es certain qu'ils sont réalistes. Les vecteurs je vous dit, y a que ça de vrai ;-)

Commentaire de Zazour le 22/11/2004 21:36:36

trés joli

j'ai 64 fps avec ma gforce 2 gts/pro

Commentaire de djl le 23/11/2004 16:08:59

c'est pas mal, vu que c'est pas du tout optimisé

Commentaire de Zazour le 23/11/2004 16:53:28

ben cela tourne plutot bien chez moi,je dirai même un peu vite :)
et bon choix des textures avec l'eau cela rend bien.

j'ai un blem par contre avec ma carte graphique,j'ai des caractères qui arrive et reparte dans le fenêtre client en open gl avec toutes les sources,je sais pas du tout de quoi cela vient,c'est surtout flagrant lorsqu'il y des textures.
en désactivant et mettant en mode filaire cela disparait.
Personne ici ne saurait d'ou cela peu il venir?
Est ce que la carte peu avoir un problème avec une unité de texturage ou cela serait plutot l'implementation sous windows?
j'ai des pilotes WHQL pourtant,et même en mettant des autres c'est idem.
Est ce quelqu'un a eu des problèmes avec des carte graphiques qui "rendent l'âme"?

PS: Excusez-moi pour le hors sujet.

Commentaire de djl le 23/11/2004 19:18:51

oui ca peut etre la memoire video qui est deffectueuse
rien n'est overclocker ?

des caractere c'est bizarre quand meme...

Commentaire de Zazour le 23/11/2004 20:10:03

ben ouai,javoue que je sais pas trop ce que c'est.
y'a un soft pour tester la mémoire vidéo des carte graphiques?

Commentaire de djl le 23/11/2004 20:19:28

je sais pas, un jeu qui pompes beaucoup en texture ?

en principe, tu teste ta carte graphique (performances, stabilité...) à coup de 3dm, en enchainant les test pour faire chauffer

Commentaire de Zazour le 23/11/2004 20:39:37

ben oui,mais la c'est un peu tard puisque j'ai bien peur qu'il y a blem,et puis c'est surtout des sources venant de ce site que je teste et je pense pas que ce soit a cause d'une "mauvaise programmation" puisque je suis le seul à avoir ce problème.

Par contre concernant ta source que je suis en train de regarder:
-pourquoi mes tu la gestion souris/clavier dans un entête et non un cpp avec?
-WPARAM c'est directement quel paramètre lier à l'API WIN32,car je connais plutot GLUT pour coder?
-concernant la fonction Resize(),pourquoi as tu une fonction Resize ET dans CallBack WindowProc ?

Commentaire de djl le 23/11/2004 20:41:54

parce que c'est mal codé ;)
n'atache pas d'importance au code, c'est à chier !
et c'est veux tout ca

Commentaire de Zazour le 23/11/2004 20:47:13

ok :) mais c'est pas si moche et ça fonctionne

Commentaire de djl le 23/11/2004 20:57:24

oui, c'est vrai ca fonctionne  bien

mais au niveau du code, je le copiais sans comprendre (pour une grand partie)

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,654 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales