begin process at 2012 02 09 14:01:11
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

OpenGL

 > PLAN D'EAU [OPENGL] [VISUAL C++]

PLAN D'EAU [OPENGL] [VISUAL C++]


 Information sur la source

Note :
7,67 / 10 - par 3 personnes
7,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :OpenGL Classé sous :eau, opengl, goutte, simulation Niveau :Débutant Date de création :25/08/2005 Date de mise à jour :13/05/2006 22:06:44 Vu / téléchargé :14 619 / 1 495

Auteur : mat74

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

 Description

Cliquez pour voir la capture en taille normale
voila je me suis lancer dans la simulation d'un plan d'eau et je suis arrivé à un truc pas trop mal. je trouve que sa fait assez réaliste.
j'ai pensé que sa pourrai servir par exemple pour la simulation de goutte d'eau en l'attenuant un peu ou a faire des traces de pas d'un personnage (pour un fps).


 Conclusion

mais il y a un gros pb => c'est un peu lent
une application OpenGL sans rien à afficher tourne à environ 900 fps sur mon ordi et avec l'appli sa tourne seulement à 80/90 fps. par contre on peut ajouter pamal d'effet sans que sa rame.
donc si vous avez des idées pour rendre mon prog plus rapide ....

 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


 Historique

13 mai 2006 22:06:44 :
voila j'ai remis l'executable

 Sources du même auteur

Source avec Zip Source avec une capture ANALYSEUR D'EXPRESSION AVEC L'API WINDOWS ( VISUAL C++ )
Source avec Zip Source avec une capture MINIGOLF 3D EN OPENGL
Source avec Zip Source avec une capture CONVERSIONS BINAIRE OCTAL DÉCIMAL ET HEXADÉCIMAL ( VC++ 6.0 ...
Source avec Zip Source avec une capture MASTERMIND AVEC OPENGL EN 3D (VC++ 6.0)
Source avec Zip Source avec une capture TETRIS ( VC++ 6.0 )

 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

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture AFFIMOFF : UNE VISIONNEUSE 3D AVEC PARAMÉTRISATION ET TEXTUR... par pgl10
Source avec Zip Source avec une capture SIMULATION BASIQUE D'EAU par djine
Source avec Zip EXEMPLE D'APPLICATION DU MOTEUR A PARTICULES par leo666
Source avec Zip Source avec une capture CRÉATION D'UN TERRAIN AVEC OPENGL par eplanet
Source avec Zip CONSULTATION (SUITE DE SIMULATION DE LA DIFFRACTION) par titip03

Commentaires et avis

Commentaire de zeratul67 le 25/08/2005 21:29:22

Je t'avoue que je ne connais quasiement pas OpenGL, j'ai juste fais un peu de DirectX. Vu le screenshot, je ne peux que dire une chose : la solution qui me semble être la plus rapide et la plus efficace est basée sur les vertex shaders. (car ils évitent les transferts de vertex vers la carte graphique à chaque rendu

Mais c'est déjà pas mal ce que t'as fait ! :)

Commentaire de mat74 le 25/08/2005 23:15:25

le problème c'est que je ne sais pas du tout ce que c'est. j'en es déjà entendu parler mais j'ai pas trouver d'explication clair sur ce que c'était

Commentaire de ewik le 26/08/2005 10:24:20

zeratul67 >> Faux ! Les vertex shaders permettent simplement de spécifier quelles opérations effectuer sur chaque vertex plutôt que d'utiliser les fonctionnalités fixes. Ce qui permet de faire plein de choses sympas. Et les fragment shaders, pareil, mais au niveau des fragments. Pour ce qui est d'éviter les transferts de données, il faut utiliser les VBOs (Vertex Buffer Object, c'est du GL, sous DX je ne connais pas le nom, mais en gros c'est pareil).

mat74 >> Si tu veux des infos sur les shaders, va sur opengl.org, et télécharge les specs de GLSL (OpenGL Shading Language). Sinon si tu cherches des tutoriaux, jettes un oeil sur gpgpu.com, developer.nvidia.com, developer.3dlabs.com, 3dshaders.com et bien sur google. Il y a des tonnes d'exemples de code sur le net. Mais si tu veux vraiment comprendre comment ca marche regarde le pipeline de la carte graphique, ca donne une bonne idée de ce qui est fait et ou se trouvent ces fameux shaders (et c'est même indispensable de le connaître pour faire de la 3D). Il y a des .ppt sur developer.3dlabs.com qui expliquent ca, je crois.
Bon courage.

Commentaire de zeratul67 le 26/08/2005 13:26:50

Faux ? pourquoi ? Lorsqu'on fait une annimation en utilisant les vertex saders, le vertex buffer n'est cahrgé qu'une fois dans la mémoire de la carte graphique, et les vertex shaders le traitent pour chaque rendu, ce qui accélère le processus, non ?

COncernantl e fonctionnement des GPU, un article plutôt court, simple et généraliste : http://www.presence-pc.com/actualite/fonctionnement-gpu-10384/

Commentaire de ewik le 26/08/2005 13:56:33

zeratul67 >> C'est donc bien l'utilisation du vertex buffer qui permet de ne charger qu'une fois les données. Mais le fait d'utiliser les vertex shaders n'a strictement rien à voir avec cela. Les shaders sont juste des programmes où l'on redéfini nous même les traitements sur les données (vertex ou fragment). Ils n'influent en aucun cas sur la gestion des données en mémoire de la carte graphique. Par contre, le fait d'utiliser les shaders permet dans certains cas d'accélérer le rendu parce que les opérations sont plus simples qu'avec des techniques de rendu en plusieurs passes, nécessaires quand on n'a pas les shaders, par exemple. Et aussi c'est fait au niveau du GPU, où les opérations sont dédiées pour ca, donc c'est plus rapide.
Les programmes sur les vertex shaders reçoivent en entrée des sommets (i.e: coordonnées dans l'espace, coordonnées de texture, normale, couleur...) et les traitent. On ne fait rien d'autre. Au niveau du pipeline on a (très simplifié) :

APPLICATION -- vertex data --> VERTEX PROGRAM -- valeurs interpolées --> FRAGMENT PROGRAM -- fragments --> FRAMEBUFFER

La gestion mémoire se trouve avant le vertex program. C'est au niveau de l'application quand on construit le VBO qu'on détermine que nos données sont dans la mémoire de la carte graphique. On peut très bien utiliser les shaders sans VBO, et donc à chaque frame rebalancer toutes les données de la mémoire centrale vers la carte graphique.

Pour résumer : vertex shaders et vertex buffer ne sont pas liés et sont totalement indépendant.

Commentaire de yoyo269 le 26/08/2005 14:49:40

Ouah ! Très joli screenshot ! J'ai toujours pas regarder le code mais déjà là gros bravo !

YOYO, @+.

Commentaire de zeratul67 le 26/08/2005 20:28:14

Biensûr qu'ils sont indépendant, mais il y a deux façons de faire :
- recalculer les vertex avec le CPU à chaque rendu, et donc on a un rempissage de evrtex buffer à chaque fois
- mettre en place le vertex buffer une seule fois (par exemple vertex pour une eau plane) et utiliserl essaders pour l'annimation, donc plus aucune modif du vertex buffer, moins de transferts

Commentaire de Zazour le 27/08/2005 08:58:18

si cela peut te rassurer,cela tourne a 50 fps chez moi.
sinon,le reste est bien (ondulations),mais peux tu l'expliquer car je suis pas fort en math,et a tu prévu de rajouter les reflexions des ondulations contre les cotés de la boite?
lorsque l'on bouge la caméra,les axes de la flèche ne suivent pas la caméra,mais reste inchangé (pas trés pratique).

Commentaire de mat74 le 27/08/2005 16:25:44

ewik : j'ai regardé tes liens. j'ai trouver pamal de truc et j'ai téléchargé qq programme. mais j'arrive pas à faire marcher se que j'ai téléchargé. il me met "GL_NV_vertex_program not supported". ne serai-ce pas ma carte qui ne supporte pas les shader ?
pourtant je l'ai acheter il y a 2-3 ans seulement

Zazour :
- pour ce qui est de la flêche j'avais même pas penser que sa serait un peu chiant si jamais on tournait la camera parce que moi pour mes teste je ne m'en servais pas
- sinon pour l'explication
en fait je fixe un point au lancement de l'effet, le centre. puis ensuite je scan le tableau d'angle. si un point est à une certaine longeur du centre (sur le plan XZ) je met l'angle à PI ( et attenuation à 1 ). sinon j'augmente l'angle et je descend la valeur d'attenuation que je multiplierai par le sinus de l'angle avant l'affichage pour qu'il ni est pas qu'une seule vague mais plusieurs éco. il suffit ensuite d'augmenter la distance recherché entre le centre et le point en court pour que l'on est l'impression que la vague se propage.
voila j'espère avoir été clair, en tout cas j'aurais essayer.

Commentaire de ewik le 29/08/2005 10:07:46

mat74 >> Soit ca veut dire que ta carte graphique est trop vieille et qu'elle ne supporte pas les shaders, soit c'est que tu as une ati, et donc normal qu'elle ne supporte pas cette extension (c'est rare quand nvidia ou ati supportent une extension de l'autre). Les extensions indépendantes du vendeur pour faire des shaders sont (de mémoire) :
- GL_ARB_vertex_program (vertex shaders en assembleur)
- GL_ARB_fragment_program (fragment shaders en assembleur)
- GL_ARB_shader_objects (GLSL)
- GL_ARB_vertex_shader (GLSL)
- GL_ARB_fragment_shader (GLSL)
- GL_ARB_shading_language_100 (GLSL)
Pour savoir si ta carte les supporte, soit tu télécharge un logiciel gratuit comme glView (http://www.realtech-vr.com/glview/), soit tu te fais un ptit prog de 3 lignes pour lister les extensions que tu as via glGetString(GL_EXTENSIONS). Ou si tu est sous linux tu tapes glxinfo. Ou sinon encore, sur les sites de nvidia et d'ati il y a des docs indiquant les extensions supportées par leurs cartes graphiques.
Et bien sur, mets bien à jour tes drivers de carte graphique.

Commentaire de mat74 le 29/08/2005 17:10:33

j'ai remis à jours les drivers il y a un programme qui passe mais le reste marche tjs pas .
mais j'ai une ati 4200 sa doit être pour sa .

donc en gros je peux pas faire de shader avec une ati ?

Commentaire de ewik le 30/08/2005 10:41:00

si, avec les cartes ati tu peux faire des shaders, cependant, l'extension dont tu parlait (GL_NV_vertex_program) est une extension nvidia (NV pour nvidia), donc ta carte ne la supporte pas. Et après il te faut une carte récente, disons 1 (peut être 2) an(s) d'age max. Côté nvidia il faut minimum une geforce fx, je crois, et côté ati j'en sais trop rien, une radeon 9800 pro ca marche, plus vieux j'en doute.

Commentaire de blotfib le 05/09/2005 11:44:42

salut

je voulais compiler ça sur du VC++6 mais il me manque le glut.h
j'ai besoin de quoi pour que ça marche ? (et où ?
merci

PS
si j'ai bien compris, cela veut ddire que c'est une win32 appli et pas une fenetre et que c'est glut qui gere les fenetres et le clavier ???

Commentaire de zeratul67 le 05/09/2005 19:48:18

sauf erreur de ma part, glut est un header opengl, tout simplement :)

Commentaire de ewik le 06/09/2005 10:03:30

blotfib >> GLUT (OpenGL Utility Toolkit) est une (vieille) librairie gérant le fenêtrage, le contexte d'affichage, le clavier, la souris... Les avantages sont la portabilité et la grande simplicité d'utilisation. En gros pour faire une fenêtre sous windows faut un gros paté tout moche d'une centaine de ligne de code, avec glut faut juste 3 lignes. Tu peux le télécharger sur le site http://www.opengl.org ou sur http://www.xmission.com/~nate/glut.html
Il existe d'autres librairies gratuites comme freeglut qui sont des mises à jour de glut, cependant la plupart des gens se contentent de glut qui fonctionne très bien.

Commentaire de remi1203 le 05/11/2005 12:23:05

ewik > Pour les shaders oui y faut une carte récente mais pas autant. Moi j'ai une GeForce 4 (Ti 4800) et les shaders marchent très bien. Ce qui ne marche pas c'est le Cg.

Commentaire de ymerej le 11/05/2006 20:20:09

Y'aurait-il moyen que tu mettes l'executable car quand on télécharge le ZIP, il n'y est pas.
Faut que tu le renommes en .exe.cutable par exemple ;-)
N'arrivant pas à le compiler sous Visual C++ (.NET 2005), j'aimerais bien voir ce que ca donne.

Pour infos, voici mes erreurs de compilation :

    Compiling...
Camera.cpp
camera.cpp(46) : error C2666: 'fmod' : 3 overloads have similar conversions
        math.h(561): could be 'long double fmod(long double,long double)'
        math.h(513): or 'float fmod(float,float)'
        math.h(120): or 'double fmod(double,double)'
        while trying to match the argument list '(float, double)'
camera.cpp(47) : error C2666: 'fmod' : 3 overloads have similar conversions
        math.h(561): could be 'long double fmod(long double,long double)'
        math.h(513): or 'float fmod(float,float)'
        math.h(120): or 'double fmod(double,double)'
        while trying to match the argument list '(float, double)'
Effet.cpp
main.cpp
ecriture.h(30) : error C2664: 'CreateFontW' : cannot convert parameter 14 from 'LPSTR' to 'LPCWSTR'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
ecriture.h(81) : warning C4267: 'argument' : conversion from 'size_t' to 'GLsizei', possible loss of data
main.cpp(60) : error C2664: 'auxDIBImageLoadW' : cannot convert parameter 1 from 'char []' to 'LPCWSTR'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
main.cpp(452) : error C2440: '=' : cannot convert from 'const char [7]' to 'LPCWSTR'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
main.cpp(479) : error C2664: 'CreateWindowExW' : cannot convert parameter 2 from 'const char [7]' to 'LPCWSTR'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Plan_deau.cpp
Vecteur.cpp
Generating Code...

Commentaire de Cphil51 le 24/09/2006 16:06:23

ymerej -> Essaie de faire des cast.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

multithreading et opengl [ par hdi ] je doit realiser une simulation avec un affichage 3D (opengl ou open inventor), pour cela je vais realiser deux threads, un qui s'occupe des calcul po multithreading et opengl [ par hdi ] je doit realiser une simulation avec un affichage 3D (opengl ou open inventor), pour cela je vais realiser deux threads, un qui s'occupe des calcul po Affichage OpenGL [ par repial ] Bonjour, j'ai réalisé un petit code de simulation et je voudrais afficher le résultat en 3D via OpenGL.J'ai à l'aide de tutoriaux réussi à afficher de simulation d'un bras d'un robot opengl [ par sipmlyme ] salut a tous. si quelqu'un a le code souces de simulation d'un bras d'un robot , je lui serais trés reconnaissante s'il me l'envoit. merci d'avance. [OpenGL] Chute d'eau - Générateur particules d'eau [ par ymerej ] Bonjour &#224; tous,je souhaite r&#233;aliser une chute d'eau (cascade) en OpenGL dans ce style l&#224; : <img src="http://screenshots.softonic.com/s2 SDL ou OpenGL ? [ par nikoland ] Bonjour,J'aimerais votre avis concernant la programmation multimedia (jeux 2D/3D). Me conseillez-vous de coder avec la librairie SDL ou avec OpenGL ?S procedure glrotatef dans opengl.dll [ par pit976 ] Bonjour a tous ! je debute avec opengl, mon bute est tout simplement de r&#233;ussir &#224; afficher ne serait ce qu'un point dans une fen&#234;tre. Afficher une image en OpenGL [ par olivier_job ] Salut,    J'aimerais savoir laquelle des méthodes donnent des meilleurs performances graphique pour ce qui est d'afficher une image dans un contexte O Afficher un point en opengl [ par DMK04 ] Bonjour,je commence l'opengl et je n'arrive pas à afficher un point.J'ulise le code suivant :#include &lt;stdio.h&gt;#include &lt;GL\glut.h&gt;void re OpenGL et linux [ par by_rabbit_08 ] Bonjour!Désolé si cette question a déjà été posée, mais je n'arrive pas à m'ensortir...Je voulais savoir si OpenGL était facilement compatible avec Li


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 : 2,059 sec (3)

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