Plan d'eau [opengl] [visual c++]

Soyez le premier à donner votre avis sur cette source.

Vue 17 309 fois - Téléchargée 1 812 fois

Description

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).

Source / Exemple :


voir dans le zip

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 ....

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

zeratul67
Messages postés
98
Date d'inscription
mardi 9 avril 2002
Statut
Membre
Dernière intervention
11 mai 2008
-
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 ! :)
cs_mat74
Messages postés
241
Date d'inscription
dimanche 10 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
-
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
cs_ewik
Messages postés
6
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
6 septembre 2005
-
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.
zeratul67
Messages postés
98
Date d'inscription
mardi 9 avril 2002
Statut
Membre
Dernière intervention
11 mai 2008
-
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/
cs_ewik
Messages postés
6
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
6 septembre 2005
-
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.

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.