PDA

View Full Version : [Frage] [Runde 5] Backface-Culling


Filz
08-12-2002, 14:51
Nachdem sie im Institut in letzter Zeit immer vergessen, uns neue, richtige Atoffs mitzuschicken:

Hier ist der Würfel mit gegebenen Normalvektoren:

gck
08-12-2002, 15:15
blöde frage, aber... wozu brauchen wir das? Es funktioniert doch auch super, wenn ich mir die Normalvektoren selber ausrechne...

btw: kann es sein, dass die Normalvektoren von der "Sphere" pro Vertex und nicht pro Polygon gegeben sind? Es sind nämlich 288 Vertices und 288 Normalvektoren... Am Shading kann ich es nicht wirklich erkennen, ob ich mit den "falschen" Normalvektoren arbeite...

Filz
08-12-2002, 16:55
Die Normalen sind bei der Kugel sicher pro Vertex gegeben.
Soll man sich jetzt den echten Normalvektor der Fläche aus den vier anderen ausrechnen? Oder einfach den ersten der Normalvektoren nehmen? Oder überhaupt alles selbst berechnen?

gck
08-12-2002, 17:53
ja, habs mir eben eh gedacht...

also, ich hab die If-Abfrage, ob ma sie berechnen soll, einfach rausgehaut und rechne die Normalvektoren IMMER aus...

Ich glaub, es macht nicht viel Sinn, aus den bereits approximierten Nv's pro Vertex nochmals die Nv's der Polygone "zurückzuapproximieren" -> Fehler wird eh nur größer...

Außerdem steht auf der Website vom 5. Bsp: "Die Normalvektoren sollten sie immer selbst ausrechnen"...

Filz
08-12-2002, 18:01
Und wie berchnest du dann die Richtung vom Normalvektor?
Allein vom Kreuzprodukt her kann dir ja passieren, dass die Vektoren einmal nach innen (ins Objekt) und einmal nach außen zeigen, je nachdem, in welcher Reihenfolge man die Punkte für das Kreuzprodukt annimmt...

gck
08-12-2002, 18:36
Stimmt, das ist schon ein Problem, aber per Definition der Kreuzproduktformel nimmt sich dazu 3 im Uhrzeigersinn aufeinanderfolgende Vertices und berechnet die Vektoren so, dass die Spitzen auf die äußeren beiden Vertices zeigen, am mittleren hängen sie zusammen -> darauf das Kreuzprodukt zeigt in die richtige Richtung...

es obliegt aber dem Code vom CG Institut bzw. deren Atoff files, dass die Vertices in der richtigen Reihenfolge zu unserer Polygonklasse kommen, aber obiges Vorgehen funktioniert offensichtlich sehr gut (zumindest bei mir) -> die Darstellung des Shading und Backface Culling schaut fehlerfrei aus...

Filz
08-12-2002, 18:42
Dann kann man nur noch hoffen (bzw. einfach annehmen), dass die drei Punkte nicht zufällig auf einer Linie sind :)

gck
08-12-2002, 18:52
das hab ich mir ebenfalls schon überlegt... wennst willst, kannst die entstanden Vektoren ja noch auf lineare Abhängigkeit testen (Matrixsystem zum lösen von n Gleichungen mit n Variablen hab damals in Eprog Runde 1 geschrieben, kann ich dir emailen, wennst willst, brauchst nur die Werte übergeben, Klassenmethode aufrufen, Ergebnisse abholen..)

andererseits: es ist einfach "blöd", wenn das passieren würde, da es sinnlos ist, einen Vertex auf einer Line zwischen zwei anderen Vertices zu definieren, da dessen Nutzen dann genau 0 wäre... scheinbar passiert das auch nicht bei den Atoffs vom CG Institut, und auch sonst ist es aus obigem Grund eher unwahrscheinlich...

andere Frage: kann es sein, dass der blöde Teapot unten offen ist, i.e. es fehlt der Boden? Eigentlich schon möglich, es gab ja auch in Runde 4 die Beschwerden, dass man von oben einen runden schwarzen Schlitz sieht, das würde implizieren, dass es am Boden kein Polygon gibt...

andere "Teapot" Anomalie: durch das Backface Culling wird das Loch im Schnabel vom Teapot schwarz, da die Polygone, die es "hinten abschließen" sollten, durchs culling rausfliegen -> schaut aber irgendwie cool aus...

Ich glaube nicht, dass die obigen beiden "Fehler" an meinem Z-Buffer liegen, da bei allen anderen atoffs alles perfekt ausschaut...

Letzte Frage: wo ist beim Code vom CG Institut die Kameraposition in Weltkoordinaten?? Ich kann deren Projektion nicht ganz folgen, hab keine Ahnung, wo die Viewplane ist...
man muss nämlich die Lichtquelle fürs Shading auf den "Blickpunkt" = (vermutlich) Camera setzen... hab eine allgemeine FlatShadingklasse geschrieben und nehm halt jetzt einmal die Lichtquelle auf (0,0,100) in Weltkoord. an, schaut cool aus, leider kommt das Licht aber nicht "direkt von vorne", was ich denke, dass sie eher mit "im Blickpunkt" meinen...
Also zusammengefasst, hehe: an welchem Punkt im Weltkoordsys. gehört die Lichtquelle angebracht?

EDIT: Denke nämlich langsam, dass wir uns aufgrund der Möglichkeit von "hohlen" Objekten das Backface Culling überhaupt schenken sollten, und stattdessen in diesem Fall die Normalvektoren umdrehen, damit wir lieber solche "Problempolygone" auch noch shaden und zeichnen können, dann würde der Teapot nicht so fehlerhaft ausschauen...
@Filz: ähnliches gilt z.b. auch für dein "Welt" atoff, das ist auch hohl i.e. Länder auf der "Rückseite" werden garnicht gezeichnet...

Deep Thought
09-12-2002, 11:25
Backface culling erleicht im Allgeimeinen 50% der Arbeit und bei Java ist das wertvolle Zeit!
Hohle Objekte sollte man mit einer Innenwand modellieren, da eine Dicke von 0 sowieso unrealisitisch ist. Wenn die CG1 Objekte darauf nicht ausgelegt sind ist das ihr Pech.
Ich glaube nicht, dass ein brauchbares Graphiksystem auf Backface culling verzichten kann.

gck
09-12-2002, 12:42
hey, es ist mir schon klar, dass Backface Culling sehr praktisch ist, aber es ist ja nicht meine Schuld, dass deren Teapot so besch*** modelliert ist... und mit backface culling wird er einfach nicht ordentlich gezeichnet (ähnliches gilt für das "Cockpit" des Rennautos...)

Ich hab denen aber eh schon einen ellenlangen Post in die Newsgroup geschrieben, ich hoffe nur, dass bald einer von der UE Leitung reinschaut...