Discussion:
Probleme bei "fillScan" / Bsp. 5
(zu alt für eine Antwort)
Sebastian Scholz
2003-12-08 15:57:06 UTC
Permalink
Hallo,

im fillScan brauche ich ja eine Variable fuer die Tiefe eines Polygons
(damit der SetPixel Aufruf klappt). Wie initialisiere ich diesen Wert
und wie muss ich diesen inkrementieren? - Aus der Beschreibung im Buch
werde ich nicht schlau.

vielen Dank,

Sebastian
Chris Chiu
2003-12-08 20:10:47 UTC
Permalink
In den
Post by Sebastian Scholz
Hallo,
im fillScan brauche ich ja eine Variable fuer die Tiefe eines Polygons
(damit der SetPixel Aufruf klappt). Wie initialisiere ich diesen Wert
und wie muss ich diesen inkrementieren? - Aus der Beschreibung im Buch
werde ich nicht schlau.
vielen Dank,
Sebastian
Im buildEdgeList mußt du die Tiefe berücksichtigen (aus depth[]) und in die
edgelist mit eintragen, dann kannst du in fillScan mit der zIntersect
Komponente eines Edges beginnen, und dann passend inkrementieren (lineare
Interpolation, denke an die Geradengleichung).

Ciao,
Christoph
***@cg.tuwien.ac.at
Martin Grödl
2003-12-10 20:33:35 UTC
Permalink
Post by Chris Chiu
Im buildEdgeList mußt du die Tiefe berücksichtigen (aus depth[]) und in die
edgelist mit eintragen, dann kannst du in fillScan mit der zIntersect
Komponente eines Edges beginnen, und dann passend inkrementieren (lineare
Interpolation, denke an die Geradengleichung).
das in buildEdgeList() übergebenen dzPerScan sollte ja laut buch (3rd)
und vo-folien (A/m + B)/C sein, wobei A,B,C doch die Komponenten des
normalvektors sind, oder?

und in fillScan passend inkrementieren heißt dann wohl mit -A/C als
inkrement?!

klappt bei mir noch nicht so ganz...
Chris Chiu
2003-12-11 07:27:04 UTC
Permalink
Post by Chris Chiu
Post by Chris Chiu
Im buildEdgeList mußt du die Tiefe berücksichtigen (aus depth[]) und
in die
Post by Chris Chiu
edgelist mit eintragen, dann kannst du in fillScan mit der zIntersect
Komponente eines Edges beginnen, und dann passend inkrementieren (lineare
Interpolation, denke an die Geradengleichung).
das in buildEdgeList() übergebenen dzPerScan sollte ja laut buch (3rd)
und vo-folien (A/m + B)/C sein, wobei A,B,C doch die Komponenten des
normalvektors sind, oder?
Normalvektor? Hier geht es um die Depth-Komponente (Z). Die Parameter
zIntersect und dzPerScan von CG1EdgeList.insert() gehen analog zu xIntersect
und dxPerscan.
Post by Chris Chiu
und in fillScan passend inkrementieren heißt dann wohl mit -A/C als
inkrement?!
In fillScan hast du dann ein Anfangs-Z (zIntersect vom ersten edge) und mußt
so inkrementieren, dass du am Ende von der for-Schleife wo du fillscannst
bei der zIntersect des zweiten edge ankommst... wie diese
Inkrementations-Variable genau aussieht, mußt du selbst rausfinden :). Ist
aber eh nicht so schwer (gegeben Anfangs- und End-Z sowie die Anzahl der
"steps" dazwischen, gesucht ist der Inkrement-Wert pro Step).

Ciao,
Christoph
***@cg.tuwien.ac.at
Martin Groedl
2003-12-11 09:49:37 UTC
Permalink
Post by Chris Chiu
Normalvektor? Hier geht es um die Depth-Komponente (Z). Die Parameter
zIntersect und dzPerScan von CG1EdgeList.insert() gehen analog zu xIntersect
und dxPerscan.
In fillScan hast du dann ein Anfangs-Z (zIntersect vom ersten edge) und mußt
so inkrementieren, dass du am Ende von der for-Schleife wo du fillscannst
bei der zIntersect des zweiten edge ankommst... wie diese
Inkrementations-Variable genau aussieht, mußt du selbst rausfinden :). Ist
aber eh nicht so schwer (gegeben Anfangs- und End-Z sowie die Anzahl der
"steps" dazwischen, gesucht ist der Inkrement-Wert pro Step).
ok, hab das ganze jetzt nach deinem tipp mit nachdenken und hausverstand
gemacht und siehe da, zBuffer geht :)

ich frage mich trotzdem wozu dann die folien und das buch gut sein
sollen, wenn da formeln drinstehen, die dann bei der implementierung nix
bringen...
normalerweise liest man sich ja mal die theorie durch bevor man
programmiert und die ist ja sehr anschaulich im buch erklärt... und
dann implementiert man das ganze ja eher so wie mans grade gelesen hat...

noch eine frage zum z-Buffer:
wie initialisiert man den am besten? reich es, wenn man einfach sehr
große, negative werte reinschreibt?
Chris Chiu
2003-12-12 12:22:08 UTC
Permalink
Post by Martin Groedl
ok, hab das ganze jetzt nach deinem tipp mit nachdenken und hausverstand
gemacht und siehe da, zBuffer geht :)
ich frage mich trotzdem wozu dann die folien und das buch gut sein
sollen, wenn da formeln drinstehen, die dann bei der implementierung nix
bringen...
normalerweise liest man sich ja mal die theorie durch bevor man
programmiert und die ist ja sehr anschaulich im buch erklärt... und
dann implementiert man das ganze ja eher so wie mans grade gelesen hat...
Naja, ich hab zwar nur die zweite Edition, aber die Depth Buffer Methode ist
drinnen in mehreren Variationen beschrieben, die prinzipiell eh dasselbe
sind... als letzte Variante davon war jene in Verbindung mit dem Scanline
Algorithmus beschrieben (die andere war eher für einen beliebigen Punkt x,y
mit Hilfe der Ebenengleichung). Ich finde es war schon klar genug, außerdem
geht es bei der Z Puffer Methode ja eh hauptsächlich darum, dass es eine Art
Depth-Clipping/Depth-Culling ist (also ein Z Vergleich durchgeführt wird
bevor tatsächlich ein Pixel (Fragment eigentlich) gesetzt wird), und dieser
Punkte ist ja bei allen Varianten gleich.
Post by Martin Groedl
wie initialisiert man den am besten? reich es, wenn man einfach sehr
große, negative werte reinschreibt?
Ja, genau. Am besten den kleinstmöglichen Wert: minus-unendlich. Der Double
Typ hat ein Feld "NEGATIVE_INFINITY".

Ciao,
Christoph

Loading...