extrait du site mandragor
Vu qu’on sait que notre objet est un ensemble de triangle, il faut à présent savoir ce qu’est un triangle. Vous savez sûrement qu’un triangle est défini par trois points. On parlera de trois vectrices (Vertexes, Meshes). Il s’agit de points dans l’espace (objet) sur lesquels sont « posés » les triangles.
Il est conseillé d’avoir un ensemble de vectrices séparé de l’ensemble des faces (c’est à dire que chaque face pointe vers trois vectrice, sans les contenir vraiment), car la plupart du temps une vectrice est utilisée par plus d’un triangle. Ca serait idiot d’avoir deux vectrices en mémoire qui représentent exactement le même point.
Une vectrice, finalement, c’est un quadruplet (x,y,z,t), point final.
Mais ça n’est pas tout, pour définir totalement une face (un triangle), on a besoin de quelques renseignements en plus :
- La normale en chaque sommet du triangle, pour des calculs de lumières.
- Le matériau de cette face.
- Si le matériau de cette face possède une texture, alors il faut que chaque sommet possède une coordonée de texture.
Exemple le plus simple avec un plain
Code : Tout sélectionner
DataSection
PlainPoints:
Data.f -0.5, 0, -0.5
Data.f 0.5 , 0, -0.5
Data.f 0.5 , 0, 0.5
Data.f -0.5, 0, 0.5
PlainTriangles:
Data.w 0, 1, 2
Data.w 0, 2, 3
Data.w 2, 1, 0
Data.w 3, 2, 0
PlainTextures:
Data.f 0, 0
Data.f 1, 0
Data.f 1, 1
Data.f 0, 1
EndDataSection
pour faire un mesh , il faut des vertex ( des points ) , des triangles , et définir les coordonnées uv de la texture.
pour un plain il faut 4 points
Data.f -0.5, 0, -0.5 ;point 0 , position en x,y,z
Data.f 0.5 , 0, -0.5 ;point 1 , position en x,y,z
Data.f 0.5 , 0, 0.5 ;point 2 , position en x,y,z
Data.f -0.5, 0, 0.5 ;point 3 , position en x,y,z
les axes , tu les places où tu veux , mais si tu veux que ton objet tourne sur son centre de gravité quand tu fais une commande rotateEntity() , il vaut mieux placer l'origine des axes sur le centre de gravité de ton objet.
ça donne ça :
ensuite , il faut relier les points pour former des triangles
ATTENTION ,l'ordre des points est important , selon que tu tournes dans un sens ou dans l'autre , le triangle sera visible ou non .
Dans mon exemple , je ne me suis pas embêté ,j'ai doublé les triangles , et je tourne un coup dans un sens , et un coup dans l'autre , comme ça , quelque soit l'orientation de mon objet , il sera visible .
exemple pour le premier triangle , 0,1,2 , et le troisième 2,1,0
Code : Tout sélectionner
PlainTriangles:
Data.w 0, 1, 2
Data.w 0, 2, 3
Data.w 2, 1, 0
Data.w 3, 2, 0
ça fontionnerait très bien avec seulement deux triangles
seulement dans ce cas ,il faudra faire attention à l'orientation de l'objet , car une face sera invisible ( cachée )
maintenant il reste les textures
Code : Tout sélectionner
PlainTextures:
Data.f 0, 0
Data.f 1, 0
Data.f 1, 1
Data.f 0, 1
je vais te décrire ce que j'ai déduit de différents essais , et suite à la lecture du code "MeshManual" fourni avec purebasic , ce n'est peut-être pas très exact ,mais ça me suffit pour bricoler
donc , tu prends la texture , par exemple une image de 256x256
tu places les axes u et v , u en horizontal , et v en vertical
et tu indiques les coordonnées de chaque vertex sur cette texture
pour un objet plain ,c'est facile , pour des formes plus compliquées , mieux vaut utiliser des logiciels qui savent faire ça très bien

bon si je retrouve ,je mettrai l'adresse d'un site qui en dit un peu plus , je suis tombé dessus il y a quelques temps.
Autre point important ,j'avais remarqué que l'axe v était orienté ainsi
mais si j'en crois ce que j'ai lu , la version 1.3 d'ogre va changer le sens de l'axe v ,il sera orienté vers le haut .
dernier point , 0 correspond à l'origine de l'axe , et 1 correspond à 100%
Data.f 1,0
signifie que le point sur la texture sera à 100% sur l'axe u , et à 0 sur l'axe v
pour les couleurs ,je ne sais pas , je n'ai pas encore fait d'essais .
pour les normales :
http://raphaello.univ-fcomte.fr/ig/Math ... teurNormal
bon ça tu devais le savoir
par contre faut que je retrouve l'adresse d'un site qui explique assez bien comment le calculer concrètement .
mais bon , toujours pareil , les logiciels de modélisation font ça très bien , faire ses meshs en manuel c'est bien pour un cube ,après , ça devient vite casse tête .
à moins que tu ne veuilles écrire un logiciel de modélisation ?
sinon , autre exemple avec un cube ici
http://www.serveurperso.com/~cederavic/ ... f=14&t=593