tirsdag, oktober 02, 2007

Back to front rendering

I stedet for at beholde vores spanning faceset i BSP knuden har vi valgt at udvide knuden med en geometry knude som indeholder dette faceset. Dette er for at kunne udnytte visitorpatterenet til at renderen geometrien.

Vi har også implementeret back-to-front rendering. Dette har vi brugt til at få renderet korekt transparency. Her er koden og et screenshot:


glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_DST_ALPHA);
glDisable(GL_DEPTH_TEST);
int i = node->ComparePoint(viewport.GetViewingVolume()->GetPosition());
if (i > 0) {
if (node->GetBack() != NULL) node->GetBack()->Accept(*this);
node->GetSpanGeo()->Accept(*this);
if (node->GetFront() != NULL) node->GetFront()->Accept(*this);
} else {
if (node->GetFront() != NULL) node->GetFront()->Accept(*this);
node->GetSpanGeo()->Accept(*this);
if (node->GetBack() != NULL) node->GetBack()->Accept(*this);
}
glEnable(GL_DEPTH_TEST);
glDisable(GL_BLEND);




På billedet ovenfor ses effekten af ovenstående kode. Kigges der grundigt efter ses der at nogle flader ikke er transparente??? Dette har vi ikke kunne forklare, men et let fix er at fjerne linien fra koden... eller bare udkommentere den hvis man er sådan en type ;-)


glDisable(GL_BLEND);


Herved opnåes følgende resultat:



Som det så kan ses har vi nu transparency og det hele ser pænt ud. Men hvorfor det er nødvendigt at fjerne den disable linie .. det må guderne vide.

I denne uge at vi arbejdet meget med SceneGrafen og dens struktur og jo mere man arbejder med den jo "pænere" bliver den. Men den lider af at være meget generel og ved at bruge et visitor pattern til gennemløb bliver abstractionen niveuaet endnu højere så derved skabes en stejl indlærings kurve. Men vi mener selv at have mere styr på tingene ud og lært at man ikke må klistre Geometri noder under hinanden og på andre måder gøre ting som OE folkene ikke havde tænkt fra starten ;-)

Vi glæder os til næste uge.....

Ingen kommentarer: