barti c'est à peut près ce que je faisait dans mon raytraceur.
je tronquais les polygones en rectangle puis j'avais une map de 0 ou 1, , puis chaque face était sélectionné par une premier conditionnel pour savoir si ont est dans le triangle ...
y a une façon de le faire puissant avec des précalcule de map des conditionnements combinatoire genre nombre de possibilité de 50 faces par point , enfin je voulais faire une textmode et prendre mon pied avec de la belle 3D seulement manque de time et de bite pour , j'ai toujours utilisé mon moteur raster à chier où ont a pas de caméra
intersection de face que j'avais tapé y a des 4 ans ou +, j'aimerais refaire un raytraceur, un moteur simple (polygone/objet classique , lumière ombre, texture...) simple et bien structuré de sorte à être très puissant, intelligent en représentation, et faire un jeu avec, enfin soyons vaine
un chouette jeu d'arcade en 100*160

poin interfac( Dro D , int S )
{
//recherche du points d'intersection
//Ix(AAt + BB) + Iy(AA1t + BB1) + Iz(AA2t + BB2) + R = 0
float Tx1,Tx2,Tx3,Ty1,Ty2,Ty3,Tz1,Tz2,Tz3;
//vec3 v1,v2,Vn;
//float asx,bsx,csx,dsx;
/*Fase[S].a = noV(Fase[S].a);
Fase[S].b = noV(Fase[S].b);
Fase[S].c = noV(Fase[S].c);*/
Tx1 = Fase[S].a.x;//Les 3 points
Ty1 = Fase[S].a.y;
Tz1 = Fase[S].a.z;
Tx2 = Fase[S].b.x;
Ty2 = Fase[S].b.y;
Tz2 = Fase[S].b.z;
Tx3 = Fase[S].c.x;
Ty3 = Fase[S].c.y;
Tz3 = Fase[S].c.z;
/*v1.x = Tx2 - Tx1;// les deux vecteurs
v1.y = Ty2 - Ty1;
v1.z = Tz2 - Tz1;
v2.x = Tx3 - Tx1;
v2.y = Ty3 - Ty1;
v2.z = Tz3 - Tz1;
asx = v1.y*v2.z - v1.z*v2.y;
bsx = v1.z*v2.x - v1.x*v2.z;
csx = v1.x*v2.y - v1.y*v2.x;
dsx = -v1.y*v2.z*Tx1 -v1.z*v2.x*Ty1 -v1.x*v2.y*Tz1 +v1.y*v2.x*Tz1 +v1.z*v2.y*Tx1 +v1.x*v2.z*Ty1;
Vn = asign( asx , bsx , csx );//normale
Fase[S].n = Normalize(Vn);*/
poin te;
float IX,IY,IZ,RS,ti,de;
float DIV,a,b,c,dw,ew,fw,gw,hw,iw,jw,kw,lw,xw,yw,zw;
IX = Fase[S].n.x;//asx;
IY = Fase[S].n.y;//bsx;
IZ = Fase[S].n.z;//csx;
RS = Fase[S].w;//dsx;
de = IX*D.a + IY*D.c + IZ*D.e;
if( de < 0 | de > 0 ){
ti = ( - IX*D.b - IY*D.d - IZ*D.f - RS )/de;
te.d = ti;
if( ti >= 0 ){
dw = Tx1;
ew = Tx2;
fw = Tx3;
gw = Ty1;
hw = Ty2;
iw = Ty3;
jw = Tz1;
kw = Tz2;
lw = Tz3;
xw = D.a*ti+D.b;
yw = D.c*ti+D.d;
zw = D.e*ti+D.f;
//solve( { ( a*d + b*e + c*f )/100 = x , ( a*g + b*h + c*i )/100 = y , ( a*j + b*k + c*l )/100 = z },{a,b,c} )
DIV = dw*(iw*kw - hw*lw) + ew*(gw*lw - iw*jw) + fw*(hw*jw - gw*kw);
a = 100*(zw*(fw*hw - ew*iw) + yw*(ew*lw - fw*kw) + xw*(iw*kw - hw*lw));
a /= DIV;
b = 100*(zw*(dw*iw - fw*gw) + yw*(fw*jw - dw*lw) + xw*(gw*lw - iw*jw));
b /= DIV;
c = 100*(zw*(ew*gw - dw*hw) + yw*(dw*kw - ew*jw) + xw*(hw*jw - gw*kw));
c /= DIV;
if ( a <= 100 && a >= 0 && b <= 100 && b >= 0 && c <= 100 && c >= 0 )
{ te.exist = 1; }else{ te.exist = 0; }
}else{ te.exist = 0; }
te.n = S;
te.t = 1;//1 for a Face
}
else{
te.exist = 0;
}
return te;
}
