|
Dernière réponse | |
---|---|
Sujet : Probleme d'illumination sous Direct3D | |
LeGreg | 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 |
Aperçu |
---|
Vue Rapide de la discussion |
---|
LeGreg | 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 |
chrisbk |
|
ITM | 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??) |
LeGreg |
|
youdontcare | 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). |
Ace17 | Héhé, ok j'ai compris!
Et c'est a partir du 8.1 je suppose que c'est devenu mieux? |
youdontcare |
[:marteau]
|
Ace17 |
Bac S quelle question! ;)
|
youdontcare |
[:totoz]
|
chrisbk |
|
Alload | 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 :D |
thunderbird54 | 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 |
Ace17 |
|
Ace17 |
|
Alload |
Suffit de lire des docs et de comprendre, pas besoin d'être un boss en maths. |
thunderbird54 | 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. |
Ace17 |
|
thunderbird54 | 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! |
Alload | Passes au per pixel lighting, nan? |
Ace17 | 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? |
thunderbird54 | tu n'aurais pas des liens a me communiquer Ace pour que j'apprenne? |
Ace17 | 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? |
LeGreg | 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 |
Ace17 |
|
thunderbird54 | la question du newbie, ou as tu appris a programmer direct 3D? |
youdontcare | 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. |
Ace17 | LOL c'est vrai, j'avais pas fait gaffe! :-)
(up déguisé :-D) |
antp | 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 :crazy: |
Ace17 | 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: http://acecorp.free.fr/land.jpg J'ai rajouté ici des lignes rouges qui indiquent dans quel sens est le quadrillage http://acecorp.free.fr/land2.jpg |