Discussion:
bsp4: buildActiveList()
(zu alt für eine Antwort)
Martin Grödl
2003-11-18 19:36:24 UTC
Permalink
wie soll man in CG1ScanFilledPolygon.buildActiveList() nur die (für die
jeweilige scanline) neuen edges hinzufügen, wie es im kommentar steht?
--> in drawClipped verwendet man dann CG1EdgeList.update() damit nicht
benötigte edges rausgeschmissen werden, oder?

noch eine frage: wozu braucht man CG1EdgeList.resort() genau?

danke im voraus,
martin
Chris Chiu
2003-11-18 20:26:52 UTC
Permalink
Post by Martin Grödl
wie soll man in CG1ScanFilledPolygon.buildActiveList() nur die (für die
jeweilige scanline) neuen edges hinzufügen, wie es im kommentar steht?
--> in drawClipped verwendet man dann CG1EdgeList.update() damit nicht
benötigte edges rausgeschmissen werden, oder?
edgelist[scan] sollte die Liste der jetzt relevanten edges enthalten
(buildEdgeList sollte das so aufbauen, dass man das so verwenden kann).
Und ja, update() entfernt die edges die bei einer jeweiligen scanline
aufhören und bei der nächsten nicht mehr dabei sein sollten.
Post by Martin Grödl
noch eine frage: wozu braucht man CG1EdgeList.resort() genau?
Du brauchst die edges die in einer Scanline relevant sind, nach x sortiert,
damit du dann die scan line füllen kannst (von links nach rechts), daher das
sortieren.

CIao,
Christoph
***@cg.tuwien.ac.at
Martin Grödl
2003-11-19 16:43:34 UTC
Permalink
Post by Chris Chiu
edgelist[scan] sollte die Liste der jetzt relevanten edges enthalten
(buildEdgeList sollte das so aufbauen, dass man das so verwenden kann).
Und ja, update() entfernt die edges die bei einer jeweiligen scanline
aufhören und bei der nächsten nicht mehr dabei sein sollten.
moment mal: die *activelist* soll doch die jetzt relevanten edges
enthalten. edgelist[scan] enthält jene edges, die zur activelist
hinzukommen, kann aber auch null sein.

gefüllt wird dann zwischen dem 1. u. 2, dem 3. u. 4. usw. edge der
activelist. danach noch die activelist resortieren.

oder hab ich das jetzt falsch verstanden??
Chris Chiu
2003-11-19 18:10:09 UTC
Permalink
Post by Martin Grödl
moment mal: die *activelist* soll doch die jetzt relevanten edges
enthalten. edgelist[scan] enthält jene edges, die zur activelist
hinzukommen, kann aber auch null sein.
Deswegen heißt es ja "activelist". Der Algorithmus entspricht eigentlich eh
prinzipiell den in AlgoDat vorgenommenen Scanline Algorithmus.
Post by Martin Grödl
gefüllt wird dann zwischen dem 1. u. 2, dem 3. u. 4. usw. edge der
activelist. danach noch die activelist resortieren.
Ja, immer zwischen zwei. Das passiert in fillscan(). Das resortieren ist
nach dem update() in drawClipped().

Siehe auch den Algorithmus im Buch (zumindest in der zweiten Edition, ich
habe leider nicht die dritte Ausgabe, also weiß ich nicht ob der dort
genauso angegeben ist).

Ciao,
Christoph
***@cg.tuwien.ac.at

Loading...