|
From: <fl...@in...> - 2001-06-13 23:04:30
|
Je viens de bidouiller pinecake pour lui faire dessiner le CSR et tous=20=
les polys du BSP.
Comme je ne bossais que sur une projection sur XY, je n'ai peut-=EAtre =
pas=20
tout vu.
Il semblerait que le CSR ne soit -pas toujours- complet, et le BSP=20
encore moins...
...En esp=E9rant que ce ne soit pas mon code de repr=E9sentation 2D qui=20=
oublie des polygones au passage...
R=E9sultats :
bigplouf.panam :
CSR visuellement complet.
BSP visuellement incomplet.
Rep=E9rage feuilles pleines/vides incorrect.
coin.panam
CSR visuellement incomplet.
BSP visuellement incomplet.
Rep=E9rage feuilles pleines/vides incorrect.
garg2.panam
CSR visuellement complet.
BSP visuellement incomplet.
Rep=E9rage feuilles pleines/vides incorrect.
maxigarg.panam
CSR visuellement incomplet.
BSP visuellement incomplet.
Rep=E9rage feuilles pleines/vides incorrect.
plouf.panam
CSR visuellement complet.
BSP visuellement complet.
Rep=E9rage feuilles pleines/vides correct.
seven.panam
CSR visuellement complet.
BSP visuellement complet.
Rep=E9rage feuilles pleines/vides incorrect.
simple.panam
CSR visuellement incomplet.
BSP visuellement incomplet.
Rep=E9rage feuilles pleines/vides correct.
vase.panam
CSR visuellement complet.
BSP visuellement complet.
Rep=E9rage feuilles pleines/vides incorrect.
Verdict :
Les deux seuls fichiers qui marchent sont des petits fichiers simples,=20=
g=E9n=E9r=E9s =E0 la main, n'ayant engendr=E9 aucune coupure au BSP.
Il y a s=FBrement un bug dans le BSP, certainement li=E9 =E0 la d=E9coupe.=
Il y a un probl=E8me troublant dans le CSR. Lipothetic g=E9n=E9rerait-il=20=
vraiment des CSR valides ? (pas de fichiers faits main avec un mauvais=20=
CSR) Que sont devenus les polygones manquants ? Myst=E8re...
Ce test a =E9t=E9 effectu=E9 sur la version de Pinecake du WE dernier, =
je n'ai=20
pas encore touch=E9 au code du BSP.
Si quelqu'un trouve le pourquoi de ces bugs... (je m'y mettrais plus=20
tard)
Voici mes boucles d'affichage, si par hasard c'=E9taient elles qui =
=E9taient=20
bogu=E9es :
void DrawBSP(BspNode *truc)
{
for (unsigned int i =3D 0 ; i < truc->polygons.GetSize() ; i++)
for (unsigned int j =3D 0 ; j < =
truc->polygons[i].GetNbPoints() ; j++) {
=
MoveTo((int)truc->polygons[i].GetPoint(j).GetX()*FACT +=20
OFFSET, (int)truc->polygons[i].GetPoint(j).GetY()*FACT + OFFSET);
=
LineTo((int)truc->polygons[i].GetPoint(j+1).GetX()*FACT +=20
OFFSET, (int)truc->polygons[i].GetPoint(j+1).GetY()*FACT + OFFSET);
}
if (truc->foreChild !=3D NULL)
DrawBSP(truc->foreChild);
if (truc->backChild !=3D NULL)
DrawBSP(truc->backChild);
}
void DisplayCSR(const CSRepresentation &CSR)
{
Rect boundsRect; SetRect(&boundsRect, 0, 0, 800, 600);
EraseRect(&boundsRect);
guint32 nbCSRSector =3D CSR.GetNumberOfSectors();
for (guint32 i =3D 0 ; i < nbCSRSector ; i++) {
ConvexSector curCS =3D CSR.GetSector(i).GetSector();
guint32 nbCSRPoly =3D curCS.GetSize();
for (guint32 j =3D 0 ; j < nbCSRPoly ; j++) {
RPolygon3d temp (curCS.Get(j));
for (unsigned int j =3D 0 ; j < =
temp.GetNbPoints() ; j++) {
MoveTo((int)temp.GetPoint(j).GetX()*FACT =
+ OFFSET,=20
(int)temp.GetPoint(j).GetY()*FACT + OFFSET);
=
LineTo((int)temp.GetPoint(j+1).GetX()*FACT + OFFSET,=20
(int)temp.GetPoint(j+1).GetY()*FACT + OFFSET);
}
}
}
}
|