Forum » » Création-Développement » » Dungeon Crawler (Odyssey) Os4
Posté : 27-04-2016 13:25
Ouhlà tu m'a mis le doute comme ça fais un an que j'ai plus touché à cette partie de Microbe3D
je viens de vérifier et effectivement je pense faire comme toi
J'ai une liste de vertex V
Une liste de vertex-normal VN
Je fais le transform de V et VN puis remplit la liste de points P qui elle subit le lighting sur tout les points
Sur OBJ on parle dans le vide voici un exemple:
C'est une pyramide comme en Egypte cad 4 faces triangulaires + une face de base carrée soit 5 faces
Les fichiers .obj sont des fichiers textes
Les lignes qui commencent par # sont des commentaires
pyramid.mtl est un autre fichier texte decrivant les materiaux/textures
(mtllib = materials library = bibliotheque de matériaux)
VERTEX:
Il y a 5 sommets (=vertex) les quatre de la base carrée plus le sommet
Ils sont notées v suivies de leur valeur x y z
UV:
Ma pyramide exemple est texturée selon Y cad la texture est "projetée" à la verticale comme une diapo
Ces coordonnées textures sons appelées U et V et vont de 0.0 à 1.0
Ici donc les quatre coins de la base carrée vont aux quatre coins de la texture et le sommet au centre (0.5 0.5)
Ils sont notées vt suivies de leur valeur u v
NORMALES:
Ensuite on a les normales : c'est la direction que regarde la face, il faut imaginer ça comme une fleche qui partirait du centre de chaque face avec la pointe vers l'exterieur
C'est une normale de face
Ces normales servent à l'éclairage : en faisant un "ratio" entre le direction de la lampe et celle de cette normale : on obtient une couleur. Cad si on regarde "vers" la lampe c'est clair sinon foncé
Quand l'objet est arrondi comme une boing-ball on comprends intuitivement que les sommets (coins de chaque face) serait mieux si il regardait vers une valeur moyenne: l'éclairage des faces serait adouci
htt ps://msdn.microsoft.com/en-us/library/windows/desktop/IC36578.gif
C'est cette valeur "moyenne" de normale par sommet qu'on appelle vertex-normal et qui est très utilisée sur les cartes 3D
Elles sont notées vn suivies de leur valeur nx ny nz
LES POINTS:
Au final on reconstitue les vrais points P à tracer constitués de leurs valeurs x y z u v nx ny nz
Ainsi
f 1/1/3 2/2/5 3/3/8 4/4/10
est une face de 4 points (base pyramide) chacun faisant reference à 3 trucs
1/1/3 veut dire:
ce point est fait avec la valeur du 1er vertex avec la valeur des 1ere coordonnées textures et la valeur de la 3éme normale
donc
xyz 1.000000 -1.000000 1.000000 uv 1.000000 1.000000 nxyz 0.000000 -1.000000 0.000000
ON TRACE:
Une fois qu'on a tout les points (3 points par triangle) sous forme de liste on la trace
avec la fonction W3D_DrawArray()pour Warp3D ou son équivalent OpenGL glDrawArrays()
LE RESTE:
g defaut
definit un groupe (un sous objet quoi) ici nommé defaut
usemtl marble
veut dire utiliser le materiau marble definit dans le fichier des materiaux ici pyramid.mtl
(usemtl =use material)
------------------------------------------------------------------------ ---
mtllib pyramid.mtl
# 5 vertices
v 1.000000 -1.000000 1.000000
v -1.000000 -1.000000 1.000000
v -1.000000 -1.000000 -1.000000
v 1.000000 -1.000000 -1.000000
v 0.000000 1.000000 0.000000
# 5 texcoords
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 0.500000 0.500000
# 12 normals
vn 0.577350 0.577350 0.577350
vn 0.000000 -1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn -0.577350 0.577350 0.577350
vn 0.000000 -1.000000 0.000000
vn -0.577350 0.577350 -0.577350
vn 0.000000 -1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn 0.577350 0.577350 -0.577350
vn 0.000000 -1.000000 0.000000
vn 0.554700 0.832050 0.000000
vn -0.894427 0.447214 0.000000
g default
usemtl marble
f 1/1/3 2/2/5 3/3/8 4/4/10
f 3/3/6 5/5/11 4/4/9
f 2/2/4 5/5/12 3/3/6
f 1/1/1 5/5/11 2/2/4
f 4/4/9 5/5/11 1/1/1
------------------------------------------------------------------------ ---
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