Voila le code, faudrait que je me replonge dedans pour les explications
et surtout que je retrouve l'adresse des sites sur lesquels j'ai trouvé les équations utiles .
l'équation du plan avec 3 points
a.f = (Xp - Matrice()\Largeur / 2) - P1\x
d.f = P3\x - P1\x
g.f = P4\x - P1\x
e.f = P3\y - P1\y
h.f = P4\y - P1\y
c.f = (Zp - Matrice()\Profondeur / 2) - P1\z
f.f = P3\z - P1\z
i.f = P4\z - P1\z
y.f = (((c * e * g) - (c * d * h) + (a * f * h) - (a * e * i)) / (f * g - d * i)) + P1\y
je fais un else , parce que je travaille avec les facettes de la matrice , donc deux triangles, au départ , je sais sur quelle facette je suis , il me reste à déterminer sur quel triangle , pour ça j'utilise une autre équation .
faudrait que je retrouve le site sur lequel j'ai appris ça
; - Matrice()\Largeur / 2 => Pour mettre l'entity dans le même repère que les facettes
Xw.f = (Xp - Matrice()\Largeur / 2) - P1\x - (Matrice()\TailleFacetteX / 2)
Zw.f = (Zp - Matrice()\Profondeur / 2) - P1\z - (Matrice()\TailleFacetteZ / 2)
If Zw - Xw < 0
Code : Tout sélectionner
;Determine les points du plan
x = Int(Xp / Matrice()\TailleFacetteX)
z = Int(Zp / Matrice()\TailleFacetteZ)
If x < 0 Or x >= Matrice()\NbFacetteX Or z < 0 Or z >= Matrice()\NbFacetteZ
ProcedureReturn 0
EndIf
P1.M3D_Vecteur
P2.M3D_Vecteur
P3.M3D_Vecteur
P4.M3D_Vecteur
NoFacette = x + Matrice()\NbFacetteX * z
NoPoint = NoFacette * 4
AdrPoint = Matrice()\PointIDMemory + NoPoint * 12
P1\x = PeekF(AdrPoint)
P1\y = PeekF(AdrPoint + 4)
P1\z = PeekF(AdrPoint + 8)
AdrPoint + 12
P2\x = PeekF(AdrPoint)
P2\y = PeekF(AdrPoint + 4)
P2\z = PeekF(AdrPoint + 8)
AdrPoint + 12
P3\x = PeekF(AdrPoint)
P3\y = PeekF(AdrPoint + 4)
P3\z = PeekF(AdrPoint + 8)
AdrPoint + 12
P4\x = PeekF(AdrPoint)
P4\y = PeekF(AdrPoint + 4)
P4\z = PeekF(AdrPoint + 8)
; - Matrice()\Largeur / 2 => Pour mettre l'entity dans le même repère que les facettes
Xw.f = (Xp - Matrice()\Largeur / 2) - P1\x - (Matrice()\TailleFacetteX / 2)
Zw.f = (Zp - Matrice()\Profondeur / 2) - P1\z - (Matrice()\TailleFacetteZ / 2)
If Zw - Xw < 0
a.f =(Xp - Matrice()\Largeur / 2) - P1\x
d.f = P2\x - P1\x
g.f = P4\x - P1\x
e.f = P2\y - P1\y
h.f = P4\y - P1\y
c.f = (Zp -Matrice()\Profondeur / 2) - P1\z
f.f = P2\z - P1\z
i.f = P4\z - P1\z
y.f = (((c * e * g) - (c * d * h) + (a * f * h) - (a * e * i)) / (f * g - d * i)) + P1\y
Else
a.f = (Xp - Matrice()\Largeur / 2) - P1\x
d.f = P3\x - P1\x
g.f = P4\x - P1\x
e.f = P3\y - P1\y
h.f = P4\y - P1\y
c.f = (Zp - Matrice()\Profondeur / 2) - P1\z
f.f = P3\z - P1\z
i.f = P4\z - P1\z
y.f = (((c * e * g) - (c * d * h) + (a * f * h) - (a * e * i)) / (f * g - d * i)) + P1\y
EndIf
ProcedureReturn y
P1,P2,P3,P4 c'est les 4 points qui composent ma facette
ma facette est composée de deux triangles
P1,P2,P4
et
P1,P3,P4