PDA

View Full Version : Sichtbarkeit und Fehler beim Fuellen


tschurlo
01-12-2002, 12:26
Mein Programm fuellt mittlerweile auch schon aus. Aber kaum drehe ich z.B. den Wuerfel wird es echt interessant. Die Sichtbarkeit (welche Seite mit welcher Farbe ist wie zu sehen) stimmt ueberhaupt nicht mehr. Ich habe mir mal nur eine der drei Farben anzeigen lassen und nur diese beiden Seiten gedreht. Manchmal fehlt da ploetzlich ein Eck oder ein anderer Teil des Wuerfels, dann wieder nicht. Ich weisz echt nicht wonach ich da jetzt suchen soll.
Ich werde mal versuchen mein Programm mit Testausgaben vollzupflastern.

Ich habe versucht, die Entscheidung, wann vom y-Wert eins abgezogen werden soll, so wie im Buch zu loesen mit yPrev und yNext, vielleicht liegt ja da der Fehler.

Hat vielleicht wer ein aehnliches Problem und kann mir helfen?

lg

gck
01-12-2002, 15:42
Verstehe deine Bedenken nicht: du hast ja noch KEINE Sichtbarkeitsüberprüfung eingebaut, die ist bei Runde 4 noch nicht verlangt, kommt dann in Runde 5 mittels Z-Buffer... Deshalb schaut der Würfel "komisch" aus, weil er als einziges verschiedenfarbige Polygone verwendet, die man nicht ohne weiteres "übereinanderzeichnen" kann. Wenn du zwei Polygone derselben Farbe übereinanderzeichnest, selbst wenn eins das andere vollständig überdeckt, schauts nicht schlecht aus, verstehst?

Das mit yPrev und yNext hat nix mit Sichtbarkeitschecks zu tun, das dient dazu, Edges, die durch einen Vertex gehen, richtig in die Edgetables einzuschreiben, nämlich ob man für so eine Scanline 2 oder nur eine Edge eintragen soll... lies dir am besten den Teil nochmal im Buch genau durch, damit dir klar wird, wofür das ist...

tschurlo
01-12-2002, 15:50
Das mit der Sichtbarkeit habe ich auch schon rausgefunden.

Dass wegen dem yNext habe ich mir nur gedacht, da ich diesen Teil mir nicht wirklich durchgedacht habe (den Code im Buch).

Dass das Programm die Knoten zerteilt, damit die drauszen, drinnen-Berechnung wieder passt weisz ich eh. Ich habe nur keine Ahnung, wo der Fehler liegen koennte.

DancingComet
01-12-2002, 17:37
das is es ja, du hast keinen fehler sondern die sache mit der sichtbarkeit kommt erst im 5.bsp...

tschurlo
01-12-2002, 17:53
Jetzt erklaerts mir bitte nicht, dass das so gehoert:

DancingComet
01-12-2002, 18:00
im prinzip ja (also keine wirklichen schönen quadratflächen), aber diese senkrechten kanten passen nicht....
irgendwas passt da mit dem updaten der active list nicht... bei den schrägen kanten sollt ja immer was zum xIntersect dazuaddiert werden, damit sie schräg werden.

Bruno
01-12-2002, 22:08
Bei mir bleiben die Kanten schon schräg, aber bei der Sphere spinnt er ein bisserl... Wenn man die nämlich um die y-Achse zu rotieren beginnt, dreht er sich plötzlich wieder in die gegenrichtung...

Bruno

gck
01-12-2002, 22:42
hehe, das wirkt nur so, weil eben die "Tiefe" noch fehlt: da die "Ringe" nicht immer richtig herum gezeichnet werden, i.e. das weggelassen wird, was eigentlich "hinten" ist, wirkt es so, als ob sich die Sphere in die Gegenrichtung dreht...
Warts ab, in der 5. Runde wird sich das Problem von selbst lösen (bzw. DU wirst es lösen...)

tschurlo
01-12-2002, 23:38
Hi!

Das Problem ist geloest!
Die Loesung war, dass die Methode delete() der Klasse CG1EdgeList nicht funktionierte (zumindest bei mir).
In der Methode update() wird eine Kante ja dann geloescht, wenn sie zur Gaenze unter einer bestimmen Scanline liegt. Nur, Testausgaben haben mir bestaetigt, dass er diese Kante einfach nicht geloescht hat, die Kantenanzahl dadurch ungerade wurde -> Nullpointer-Exception!
Mit einer eigenen update() und einer inkludierten delete()-Methode wird jetzt bei mir alles korrekt gezeichnet. Auch der Teapot weist keine "Loecher" mehr auf.
Keine Ahnung wieso das anscheinend nur mir passiert ist, aber deren delete()-Methode ist irgendwie fragwuerdig.

Na, auf jeden Fall, gute Nacht.

lg

wolk
02-12-2002, 12:40
auch ne frage

wie schaut bei euch der würfel aus
hat der nur 5 seiten gefüllt (eine blaue fehlt) oder ?

mfg

tschurlo
02-12-2002, 12:57
Nach obiger Fehlerbeseitigung wird bei allen Figuren brav alles gefuellt.

Lg

wolk
02-12-2002, 13:15
frage : passt der sch... würfel so oder nicht ?


wenn nein, was könnte falsch sein

danke

würfel ist kleinigkeit nach x und y gedreht

tschurlo
02-12-2002, 13:29
Passt schon!

Die Sichtbarkeit kommt erst in Bsp fuenf und die andere blaue Seite siehst du dann, wenn du den Wuerfel noch mal um 180 Grad drehst.

Jokeman
02-12-2002, 13:32
soweit ich das beurteilen kann, passt der würfel so ;)

wolk
02-12-2002, 13:36
ok, schönen dank

dann kommt der effekt mit der scheinbar fehlenden seite daher, dass die einzelnen seiten "in falscher reihenfolge" gezeichnet werden oder ?
wenn die blaue seite zum schluß gezeichnet würde, dann wäre es perfekt glaub ich mal

mfg wolk

Jokeman
02-12-2002, 13:52
jup...
nur dann wärs halt aus einer andren perspektive falsch *g*

wenn Du im CG1Object if (transNormals[faceTable[x][n+1]][Z]>=0) vorm zeichnen einfügst, schauts besser aus weil das polygon nur gezeichnet wird, wenn seine normale nach vorne zeigt... aber dann werden bei ein paar objekten auch polygone weggelassen, die eichentlich gezeichnet werden sollten...

also warten wir mit der sichtbarkeit lieber aufs nächste beispiel :)

tschurlo
02-12-2002, 14:19
Was ich oben zu der delete()-Methode geschrieben habe, ist Unsinn.
Ich habe nur die CG1EdgeList etwas umformatiert (mit Klammern und so), weil ich mit dem, was die mir da schicken nicht arbeiten kann. Bei dreifach verschachtelten ifs und elses brauche ich einfach Klammern. Da habe ich mich vertan. Ich habe das ganze naemlich nochmal mit dem Original-File getestet und jetzt passts.

Sorry