View Full Version : Wann wird z-Buffer wirksam?
tschurlo
11-12-2002, 14:48
Hi!
Ich habe jetzt schon eine zusaetzliche Klasse FlatShaded Polygon, wo ich mir auch die z-Werte mit insert einfuege.
Habe dazu in EdgeList eine weitere insert-Methode geschrieben um auch die z-Werte einfuegen zu koennen (haette aber auch mit den z-werten zuerst ein Edge anlegen koennen, und das dann einfuegen).
In Polygon habe ich den depth-Buffer angelegt.
Keine Fehler beim Kompilieren aber irgendwie merke ich noch nichts von richtiger Sichtbarkeit. habe ich was falsch gemacht?
Fehlt noch was?
Gleich noch eine Frage zum Shading:
Im Buch haben sie ja da nicht massenhaft viel darueber stehen, habt ihr euch da einfach nur ueber die TODO's weitergehantelt oder wie seid ihr das angegangen?
lg
1) Der Z-Buffer soll auch beim einfachen scan-filling aktiv sein -> nur wirst du dort halt von dessen "Korrektheit" nix merken, weil alle Objekte die gleiche Farbe auf jedem Polygon haben: Ausnahme: der Würfel -> der soll auch im scanfill modus ab jetzt richtig gezeichnet werden...
d.h. mach die änderungen lieber in scanfilledpolygon und lasse flatshadedpolygon davon "erben"...
2) keine Ahnung, warums noch nicht funktioniert, die Fehlerbeschreibung ist nicht gerade genau... hast du auch schon in CG1NewCanvas.java überhaupt dafür gesorgt, dass der Z-Buffer für die Sichtbarkeitskontrolle initialisiert bzw. verwendet wird?
tschurlo
11-12-2002, 15:11
Also in CG1NewCanvas habe ich alle Aenderungen schon vorgenommen.
Mein FlatShaded erbt auch, ich habe die Aenderungen aber im FlatShaded gemacht. Ich werde das mal umdrehen.
tschurlo
11-12-2002, 23:05
Na super, jetzt habe ich mich richtig gefreut, dass der z-Buffer funktioniert, da bin ich draufgekommen, dass er bei mir nur dann funktioniert, wenn ich auch Backface Culling mache. D.h. er funktioniert doch nicht, oder?
Nein, dann funktioniert er absolut nicht, leider...
Hast du die Berechnung des z-Werts in CG1Polygon.java implementiert?
tschurlo
11-12-2002, 23:40
Ja, habe ich.
Immer wenn die x, y- Werte berechnet werden (3x) habe ich auch
depthBuffer[i] = punkt[Z];
geschrieben.
Ich weisz schon nicht mehr was ich machen soll, ich habe alles ueberprueft und kann den Fehler nicht finden. Aber ich will wenigstens diesen Teil am Montag abgeben koennen.
Dann hast du wahrscheinlich vergessen in CG1ScanFilledPolygon in der Methode buildCG1EdgeList()
eine 3-dimensionale Edge zu erstellen/verwenden?
CG1Edge(int nY, double nX, double nDx, double nZ, double nDz)
Für ein einzelnes Objekt ist Backface Culling für die Sichtbarkeitskontrolle aber auch völlig ausreichend...
wenn du den Fehler nicht findest (und ich kann dir da auch nicht wirklich helfen, es ist schwer, zu "erraten", was du falsch haben könntest), dann implementier zumindest noch das Flatshading -> dann würden deine Objekte zumindest korrekt ausschauen und du kannst u.U. beim Abgabegespräch noch Punkte rausschlagen...
andererseits: Jetzt, also mehrere Tage vor Abgabe, aufzugeben ist eh nicht drin, hehe...
tschurlo
12-12-2002, 10:02
@ Filz: Nein, das habe ich auch nicht vergessen. In der CG1BuildEdgeList der Klasse FlatShadedPolygon habe ich ein insert, das auch die z-Werte beruecksichtigt.
... aeh, oder soll ich das echt in ScanFilled machen? Ich dachte, FlatShaded ist die speziellere der beiden Klassen und deshalb mache ich das hier.
@gck: Ich gebe eh noch nicht auf, ich.... :hewa:
sicher sollst du auch schon in ScanFilledPolygon auf die korrekte Sichtbarkeit achten!! Nur, weils noch nicht geshadet ist, heißt das ja nicht, dass es "falsch" gezeichnet werden darf -> z.b. der Würfel sollte mit Z-Buffering auch im Scanfilled Modus korrekt gezeichnet werden...
woher bekomm ich die 2 Z-Werte, die ich da angeben muss?
hab ich die schon irgendwo gegeben?
ich glaub ich habs gefunden: depth[i] - stimmt das?
@gck
Bist du sicher, dass wir das auch beim Scanfill integrieren sollen?
Also entweder hab ichs nicht durchschaut oder die Angabe zu dem Punkt ist nicht ganz konsistent, da einerseits das zBuffering auf Scanfillpolygon angewendet werden soll - andererseits dieses aber nicht explizit abgegeben werden muss - bzw. die Todos für die z-Buffer-Behandlung im FlatShadedPolygon enthalten sind...
Wennst es aber gleich ins Scanfill integrierst werden jedenfalls beide Modi richtig gezeichnet.
LolaRuns
14-12-2003, 20:10
Dümmste Frage aller Zeiten.
Wie schafft ihr es innerhalb von buildEdgelistl auch depth zuzugreifen. Wird depth nicht in canvas deklariert, worauf man in buildEdgelist keinen Zugriff hat?
genauso wie du für die x und y coordinaten die werte aus clipped[][] bekommst, machst du es mit den z coordinaten welche du aus depth[] bekommst.
LolaRuns
14-12-2003, 20:19
*rotwerd*
Fehler gefunden. Danke :)
...die Angabe zu dem Punkt ist nicht ganz konsistent, da einerseits das zBuffering auf Scanfillpolygon angewendet werden soll - andererseits dieses aber nicht explizit abgegeben werden muss - bzw. die Todos für die z-Buffer-Behandlung im FlatShadedPolygon enthalten sind...
Überschreibt ihr jetzt gleich ScanFillPolygon und gebt das ab, oder nur FlatShadedPolygon?
Ich bin mir nämlich jetzt nicht sicher (wegen den TODOs).
Vielleicht könnte ja auch die Übungsleitung was dazu sagen.
Überschreibt ihr jetzt gleich ScanFillPolygon und gebt das ab, oder nur FlatShadedPolygon?
Also das Überschreiben in FlatShadedPolygon dürfte schon stimmen. Wollte es zwar schon ändern, habe es dann aber mal so belassen. Seitens Übungsleitung gibt es zu der Thematik bereits eine Aussage.
http://hades.gothic.at/iforum/showthread.php?t=14030
Für einfärbige Objekte stimmts dann (zB Indy, F-4 und LosAngeles)- nur bei Objekten mit mehreren Farben kommen interessante Effekte zum Vorschein (zB Sphere, Würfel).
vBulletin® v3.7.1, Copyright ©2000-2008, Jelsoft Enterprises Ltd.