Probleme d'illumination sous Direct3D - Programmation
Marsh Posté le 10-06-2002 à 19:34:21
C'est genial pour illustrer un phénomène de l'oeil humain : on voit nettement mieux les triangles sur la 1ère image si on a regardé la 2ème image juste avant
Marsh Posté le 10-06-2002 à 19:49:44
LOL c'est vrai, j'avais pas fait gaffe! :-)
(up déguisé :-D)
Marsh Posté le 10-06-2002 à 21:45:01
gouraud = calcul de l'intensité lumineuse à chacun des sommets du triangle, puis interpolation linéaire entre les trois sommets lors de l'affichage. c'est donc une grossière approximation, l'éclairage d'une surface produisant une fonction non linéaire.
solution bourrin qui marche bien : subdiviser ton terrain.
solution bourrin optimisée localement : subdiviser le bout de ton terrain qui est affecté par la lumière.
solution teste autre chose avant de poster : une fois que tu auras mis une texture ça se verra déjà beaucoup moins.
solution esthétique : tu n'auras a priori jamais d'éclairage aussi violent / localisé sur ton terrain. arrête tes couleurs de coder et fait du joli.
solution texture : tu réalises l'éclairage par une lightmap, ici une texture concentrique blanc au centre -> noir sur les côtés que tu affiches sur ton terrain au bon endroit, la couleur étant réalisée par les vertex colors. pour chaque light, tu détermines les triangles qu'elle affecte, ça te donnera un carré à remplir. tu blend les lights en additif, puis la texture par-dessus en multiplicatif.
Marsh Posté le 10-06-2002 à 23:20:45
la question du newbie, ou as tu appris a programmer direct 3D?
Marsh Posté le 10-06-2002 à 23:46:46
thunderbird54 a écrit a écrit : la question du newbie, ou as tu appris a programmer direct 3D? |
sur Internet, principalement
youdontcare a écrit a écrit : solution teste autre chose avant de poster : une fois que tu auras mis une texture ça se verra déjà beaucoup moins. |
Négatif, tu penses bien que ce n'est pas la premiere fois que je mets de la lumiere dans une appli D3D. J'ai déja essayé les textures!
Marsh Posté le 11-06-2002 à 00:18:02
ben les solutions proposées me paraissent convenable,
de toute facon tu n'arriveras a rien de mieux (qualitativement) avec le Gouraud shading donc soit tu subdivises plus (pour approcher le per pixel lighting), soit tu utilises des lightmaps (si ta source de lumiere eclaire toujours de maniere spherique ou cylindrique notamment), soit tu fais du vrai per-pixel lighting comme propose sur les sites de nVidia ou MSDN.
LeGreg
Marsh Posté le 11-06-2002 à 08:14:16
Effectivement, quand je divise par 10 les dimensions des triangles, la ca devient parfait au niveau du rendu. Les perfs, par contre...:-)
Et le per pixel lighting ca marche comment? Direct3D implémente ca ou il faut que je le programme moi meme?
Je crois cependant que je vais opter pour le lightmap. Quels sont les inconvénients du lightmap?
Marsh Posté le 23-06-2002 à 20:18:52
tu n'aurais pas des liens a me communiquer Ace pour que j'apprenne?
Marsh Posté le 23-06-2002 à 22:33:58
Pas de probleme jeune padawan
Pour commencer (en francais) :
http://membres.lycos.fr/jcomgl/home1.php3
Ensuite, sur des questions plus précises tu as une multitude d'articles sur GameDev :
http://www.gamedev.net/reference/l [...] egoryid=24
Et je ne peux que te recommander de te procurer le SDK de DirectX 8 qui contient les programmes d'exemple ainsi que le manuel de DirectX 8 au format chm - il est absolument indispensable.
Bonne chance :-)
Au fait connais tu d'autres API dans le genre ou c'est la premiere fois que tu t'attaques a la 3D?
Marsh Posté le 23-06-2002 à 22:56:26
c la premiere fois ke je m'attak a la 3D
avant je n'ai fait ke des prog en C sous dos
et kom le dos ca fe chier ben fo ke j'apprenne autre chose!
Marsh Posté le 23-06-2002 à 23:05:52
thunderbird54 a écrit a écrit : c la premiere fois ke je m'attak a la 3D |
Mhhh et bien j'espere que tu n'as pas peur des maths
Et sinon il parait que Direct3D est beaucoup trop compliqué par rapport a ce qu'il permet de faire... je te conseille donc de peut etre opter pour OpenGL
Marsh Posté le 23-06-2002 à 23:09:02
alors pour les maths g le niveau bac+1 ca ira?
sinon le site ke tu m'as donne parle d'opengl aussi donc je regarderais, j'espere ke j'arriverais a kelke chose.
Marsh Posté le 23-06-2002 à 23:10:05
thunderbird54 a écrit a écrit : alors pour les maths g le niveau bac+1 ca ira? |
Suffit de lire des docs et de comprendre, pas besoin d'être un boss en maths.
Marsh Posté le 23-06-2002 à 23:14:14
thunderbird54 a écrit a écrit : alors pour les maths g le niveau bac+1 ca ira? |
Hey j'ai pas dit qu'il fallait etre bon :-)
(Je l'ai pas encore mon bac moi! (enfin dans quelques jours j'espere! ))
Non, comme le dit Alload, suffit juste d'etre capable de comprendre la doc, et vu que c'est principalement des maths, ca marche mieux si on aime ca...
Marsh Posté le 23-06-2002 à 23:17:39
Alload a écrit a écrit : Passes au per pixel lighting, nan? |
En deux mots ca consiste en quoi, et est-ce que c'est pris en charge par Direct3d ou il va falloir que je fasse ca en software?
Marsh Posté le 23-06-2002 à 23:23:26
merde a toi alors ace
kel bac? j'ai passe le mien l'année derniere, bac S
enfin je ne v po trop t'embeter parce que on s'ecarte de ton sujet! lol
Marsh Posté le 23-06-2002 à 23:32:01
Ace17 > en fait, tu peux faire du per pixel lighting en réécrivant la fonction qu'exécute la carte graphique avant d'écrire les données d'un pixel dans le tampon, c'est ce qu'on appelle un pixel shader. Il existe aussi les vertex shaders, là on change la fonction appliquée à chaque sommets.
Cherches du côté de la SDK de DirectX ou ici: www.direct3d.net
Sinon, moi aussi je passe le BAC S cette année
Marsh Posté le 23-06-2002 à 23:37:51
Ace17 a écrit a écrit : Mhhh et bien j'espere que tu n'as pas peur des maths Et sinon il parait que Direct3D est beaucoup trop compliqué par rapport a ce qu'il permet de faire... je te conseille donc de peut etre opter pour OpenGL |
(je m'eleve discrement mais néanmoins violemment contre cette affirmation totalement fausse )
Marsh Posté le 23-06-2002 à 23:47:16
chrisbk a écrit a écrit : (je m'eleve discrement mais néanmoins violemment contre cette affirmation totalement fausse ) |
...
+1
Marsh Posté le 23-06-2002 à 23:51:02
thunderbird54 a écrit : kel bac? |
Bac S quelle question!
alload a écrit : Sinon, moi aussi je passe le BAC S cette année |
Bonne réussite a toi (ou merde, au choix!)
chrisbk a écrit a écrit : (je m'eleve discrement mais néanmoins violemment contre cette affirmation totalement fausse ) |
Ah? Quelqu'un soutient Direct3D? C'est rare ici :-)
Je n'ai rien contre Direct3D! J'ai eu beaucoup d'echos sur la complexité de D3D par rapport a la simplicité d'OpenGL. Mais personnelement, je ne peux pas vraiment juger car je n'ai jamais essayé sérieusement essayé OpenGL pour le moment ... Peut etre pourrais-tu m'éclairer? (sans que ca parte en troll! )
Marsh Posté le 24-06-2002 à 00:04:35
Ace17 a écrit a écrit : J'ai eu beaucoup d'echos |
dx a commencé comme une grosse bouse infâme, puis a rattrapé opengl, puis est devenu + 'simple' et + complet. tape du code de multitexture sous gl et sous dx, puis compare. essaye de faire des shaders sous gl et sous dx, puis compare. etc.
Marsh Posté le 24-06-2002 à 00:08:20
Héhé, ok j'ai compris!
Et c'est a partir du 8.1 je suppose que c'est devenu mieux?
Marsh Posté le 24-06-2002 à 00:11:32
c'est devenu équivalent vers le 5 je crois (ou le 6 ? non je crois bien que c'est le 5). en fait, à partir du moment où DrawPrimitive() est apparu. avant, c'était vraiment la merde pour afficher ne serait-ce qu'un triangle à l'écran.
à partir du 7, c'est devenu mieux (apparition de la lib d3dx & co).
Marsh Posté le 24-06-2002 à 00:48:23
Citation : Ah? Quelqu'un soutient Direct3D? C'est rare ici :-) |
non ce n'est pas rare mais c'est une source de trolls infames
Citation : Je n'ai rien contre Direct3D! J'ai eu beaucoup d'echos sur la complexité de D3D par rapport a la simplicité d'OpenGL. Mais personnelement, je ne peux pas vraiment juger car je n'ai jamais essayé sérieusement essayé OpenGL pour le moment ... Peut etre pourrais-tu m'éclairer? (sans que ca parte en troll! ) |
Les developpeurs PC ont clairement fait le choix de Direct3D.
Les raisons sont diverses et variees, mais c'est peut etre lié au volontarisme de Microsoft par rapport a ceux qui font evoluer OpenGl. (et peut etre a la "fausse" simplicité d'OpenGl qui plait aux débutants mais moins aux programmeurs serieux).
LeGreg
Marsh Posté le 24-06-2002 à 12:19:23
Arretez, de cracher sur l'OpenGL. Il est quand même issu du monde professionnel et plus vieux que D3D.
De plus, l'openGL est portable est devient par le même coup la seule alternative sur Linux, raison de plus de s'y mettre.
L'OpenGl est généralement plus rapide que D3D pour des travaux similaires.
(je vois toujours pas en quoi du code multitextures serait compliqué sous openGL??)
Marsh Posté le 24-06-2002 à 13:12:37
ITM a écrit a écrit : Arretez, de cracher sur l'OpenGL. Il est quand même issu du monde professionnel et plus vieux que D3D. De plus, l'openGL est portable est devient par le même coup la seule alternative sur Linux, raison de plus de s'y mettre. L'OpenGl est généralement plus rapide que D3D pour des travaux similaires. (je vois toujours pas en quoi du code multitextures serait compliqué sous openGL??) |
ceci est faux avec les cartes modernes, pour une raison toute con : l'impossibilité de stocker les vtx en ram video (avec l'ogl "de base" ). Pour ca faut passer par de fines extension proprietaire, ce qui limite la portabilité. glbegin, glEnd, c simple a utiliser, mais niveau performance c'est zero complet. glVertexArray (ou je sais plus quoi), c'est deja mieux, mais a priori les vtx se baladent tjs via l'agp a chaque appel....
Ensuite, une fois ceci fait, il n'y a pas franchement aucune raison pour que l'un ou l'autre aille plus vite...
le multitex n'est pas supporté par l'opengl1.1 en standart (le seul ogl dispo sous win), il faut a nouveau passer par des extensions. et il faut le dire, les extension, c'est clairement pas le pied a utiliser
(j'ai l'impression que je me repete un peu au fil des mois )
Marsh Posté le 24-06-2002 à 13:20:32
cette discussion est inutile et recurrente..
c'est toujours les memes arguments qui reviennent
donc une recherche sur le forum ou Google
sur "d3d vs opengl" devrait satisfaire
les amateurs de mauvaise foi.
LeGreg
Marsh Posté le 10-06-2002 à 19:31:41
J'ai une liste de triangle qui forment une surface plane. A la base c'est pour faire le rendu d'un terrain, donc ca ne va pas rester plat. En fait j'espérais atténuer justement les variations de terrain en m'aidant du Gouraud Shading et des vertex normals. Mais je me suis rendu compte que meme quand le terrain était plat il y avait le probleme, donc les vertex normals ne semblent pas en cause.
Voici le probleme : en fait on distingue la séparation entre les triangles grace a la différence d'illumination. Voici un screenshot:
J'ai rajouté ici des lignes rouges qui indiquent dans quel sens est le quadrillage
Message édité par Ace17 le 06-10-2002 à 19:50:01