website logo
Auteur
avatar
Crisot

Forum » » Création-Développement » » Dungeon Crawler (Odyssey) Os4


Posté : 27-04-2016 14:50 icone du post

Alain:

C'est bien ainsi que je faisais il y a encore peu. Depuis comme je l'expliquais je suis passé à un buffer unique. Ainsi donc, avec un buffer de vertex unique, il n'y a pas de normale de face mais des normales de vertex, pour obtenir le même résultat que toi, je devrais donc dupliquer les vertex. Perte sêche sur le coup, mais le gain se refait rapidement:

Par exemple au moment de ton lightning, tu fais ton éclairage selon la normale de la face, tu récupères les 3 vertex de cette face, et tu écris un array "final" qui contiendra tes 3 vertex éclairés selon la face. ->Au final, à ce moment là, tu dupliques quand mêmes les vertex.

Avec la méthode "OpenGL", le lightning est très simple: On éclaire les vertex les uns à la suites des autres selon sa propre normale. Fin de l'histoire. Du coup, on le fait pendant la transformation, d'où le terme "transform AND lightning".

En fait, je n'utilise même plus DrawArray(), mais DrawElement(), équivalent OpenGL de DrawIndexedArray(), réputé bien plus performant.

En fait, voici "en gros" comment fonctionne un moteur "OBJ" utilisant DrawArray().

-un buffer SOURCE de vertex

-un buffer SOURCE de UV

-un buffer SOURCE de normale

-un buffer SOURCE d'indices pointant vertex/UV/normale

puis:

-un buffer DESTINATION de vertex transformés

puis:

-un array FINAL de vertex transformés, incluant XYZ/COULEUR/UV, que l'on envoi à DrawArray. Un triangle = 3 vertex, ainsi, si un vertex strictement unique dans le mesh sert à 18 polygones, il apparaitra 18 fois dans ce buffer.

puis:

-DrawArray(array FINAL)


Voici maintenant simplement comment fonctionne OpenGL (et pourquoi je l'ai copié à mort)

-un buffer SOURCE de vertex incluant XYZ/COULEUR/UV/NORMALE

-un buffer SOURCE d'indices pointant les vertex

puis:

-un buffer DESTINATION de vertex transformés/éclairés incluant XYZ/COULEUR/UV

puis:

-DrawElement(). La SOURCE d'indice, toujours valable, pointant les vertex DESTINATION. Si un vertex strictement unique dans le mesh sert à 18 polygones, seul l'indice sera copié 18 fois.



Bref: OpenGL pousse à dupliquer les vertex plutôt qu'à multiplier les buffers de pointage. Mais c'est très vite rentable...

--
AmigaOne X1000 - 2 Go DDR2 - Sapphire R9 280x Toxic - Crucial MX200 500 Go - Alim/Cooling BeQuiet

Cet article provient de Le site des utilisateurs francophones actuels et futurs d'AmigaOS 4.x
https://amiga-ng.org/viewtopic.php?topic=1412&forum=14