Seite 2 von 2

Re: Im Raum: Quadrat verdeckt teilweise Quadrat?

Verfasst: 12.12.2010 01:50
von CSHW89
Danke erstmal für die vielen ideen :allright: . konnte bisher nicht schreiben, zu viel zu tun, uni halt.
DarkDragon hat geschrieben:Tiefenpuffer wär doch am besten und am einfachsten.
siehe
D.J.Peters hat geschrieben:Einen Z-Buffer bei Software Rendering braucht man eigentlich "nur" wenn es sich wirklich
um durchdringende Flächen handelt (welche sich nicht so einfach der Tiefe nach sotieren lassen)
aber das trifft ja bei dem Zauberwürfel eher nicht zu.
außerdem möchte ich das zeichen der polygone java überlassen. bei der sache mit dem z-buffer müsste ich jeden eizelnen pixel malen: zu pixelig, mit den polygonen siehts besser aus.
D.J.Peters hat geschrieben:In Software 3D nimmt auch gerne die Flächennormale um zu bestimmen ob eine Fläche vom Betrachter/Kamera her weg zeigt.
Wenn man dann sowiso schon alle Flächennormalen hat dann kann man die verbleibenden sichtbaren Flächen auch an Hand
der Normalen der Tiefe nach sortieren und von hinten nach vorne Zeichnen.
funktioniert nicht, habs probiert, oder ich habs falsch verstanden. denn wenn eine fläche fast nach oben zeigt, wie hier z.b. die weißen flächen, kommt die Flächennormale ja nicht so weit zum betrachter hin. eine fläche die dahinter ist, und zum betrachter hinzeigt, hat doch dann eine normale, die ggf. näher zum betrachter liegt (ist schwierig zu erklären, was ich meine, oder wie gesagt, ich habs falsch verstanden).
Riacon hat geschrieben:die schwarzen flächen in einem zauberwürfel liegen doch immer im innern, egal wie der würfel verdreht ist und schauen immer höchstens teilweise nach draußen. also erst die schwarzen flächen zeichnen, dann den rest
auch ausprobiert, funktioniert auch nicht so hundertprozentig. weiß aber grad nicht warum.

naja, werd mich wohl nochmal dran hinsetzen müssen.

lg kevin

Re: Im Raum: Quadrat verdeckt teilweise Quadrat?

Verfasst: 12.12.2010 08:16
von DarkDragon
CSHW89 hat geschrieben:
DarkDragon hat geschrieben:Tiefenpuffer wär doch am besten und am einfachsten.
siehe
D.J.Peters hat geschrieben:Einen Z-Buffer bei Software Rendering braucht man eigentlich "nur" wenn es sich wirklich
um durchdringende Flächen handelt (welche sich nicht so einfach der Tiefe nach sotieren lassen)
aber das trifft ja bei dem Zauberwürfel eher nicht zu.
außerdem möchte ich das zeichen der polygone java überlassen. bei der sache mit dem z-buffer müsste ich jeden eizelnen pixel malen: zu pixelig, mit den polygonen siehts besser aus.
Zu pixelig wirds nur wenn man eine falsche Kombination von Algorithmen verwendet. Außerdem mappst du hier doch auch Polygone auf Pixel (wenn auch nur indirekt) und das ist dir nicht zu pixelig :lol: .
Aber es gäbe ja auch noch Clipping womit man alle schwarzen Flächen an den Bunten clippen könnte. ( http://de.wikipedia.org/wiki/Algorithmu ... nd-Hodgman )
Wobei wenn du natürlich garnichts anderes damit machen willst als deinen Würfel, genügt es natürlich nur die schwarzen Flächen zuerst zu zeichnen.

Re: Im Raum: Quadrat verdeckt teilweise Quadrat?

Verfasst: 12.12.2010 19:52
von CSHW89
DarkDragon hat geschrieben:ußerdem mappst du hier doch auch Polygone auf Pixel (wenn auch nur indirekt) und das ist dir nicht zu pixelig :lol: .
dann hättest du es vorher sehen müssen. hab i-ein befehl mit rein getan zur kantenglättung. ich glaub, wenn ich nur pixel zeichnen würde, würde das kein effekt haben, ergo zu pxielig.

hab jetzt noch ein paar veränderungen vorgenommen. ist zwar nicht perfekt, aber ich mach das wirklich so, dass ich die schwarzen flächen zuerstzeichne. für den würfel reichts.

naja danke nochmal

lg kevin

Re: Im Raum: Quadrat verdeckt teilweise Quadrat?

Verfasst: 12.12.2010 20:14
von DarkDragon
CSHW89 hat geschrieben:
DarkDragon hat geschrieben:ußerdem mappst du hier doch auch Polygone auf Pixel (wenn auch nur indirekt) und das ist dir nicht zu pixelig :lol: .
dann hättest du es vorher sehen müssen. hab i-ein befehl mit rein getan zur kantenglättung. ich glaub, wenn ich nur pixel zeichnen würde, würde das kein effekt haben, ergo zu pxielig.
[Ironie]Joa, Bildschirme zeichnen ja auch was anderes als Pixel, nicht wahr?[/Ironie]

Kantenglättung hin oder her, das kann man mit den Algorithmen zum Zeichnen von Polygonen auch erreichen.

Re: Im Raum: Quadrat verdeckt teilweise Quadrat?

Verfasst: 12.12.2010 21:07
von D.J.Peters
CSHW89 hat geschrieben:funktioniert nicht, habs probiert, oder ich habs falsch verstanden. denn wenn eine fläche fast nach oben zeigt, wie hier z.b. die weißen flächen, kommt die Flächennormale ja nicht so weit zum betrachter hin. eine fläche die dahinter ist, und zum betrachter hinzeigt, hat doch dann eine normale, die ggf. näher zum betrachter liegt (ist schwierig zu erklären, was ich meine, oder wie gesagt, ich habs falsch verstanden).
Dir ist schon klar das eine Flächennormale allein keine Position hat sondern "nur" das normierte* Ergebnis einer Rotation ist.

*Die Länge ist immer 1 und der Ursprung liegt immer im Zentrum des Koordinatensystems.

Wenn die Z Vektorkommponente der Flächennormale negativ ist dann Zeigt die Fläche weg vom Betrachter/Kamera und muss daher nicht gerendert werden.

Jetzt nimmst Du alle Flächen die den Sichtbarkeitstest bestanden haben (Normale.Z >=0) und packst sie bzw. desses Index in die Liste/Array der sichbaren Flächen.

So weit so gut.

Nun sotierst Du die verbleibenden Flächen entsprechend ihrer Z Komponennten ((z1+z2+z3+z4)*0.25) = das Zentrum der Fläche.

Wenn Du nun beim Sortieren fest stellst das zwei Flächenzentren die gleiche Entfernung zum Betrachter haben (kommt bei einem nicht rotierendem Würfel öfter vor)
dann hift dir der Vergleich dessen Flchennormale oft* weiter um entscheiden zu können welche zuerst zu Rendern ist.

*je nach Rotation kann es aber auch mal vorkommen das die Enscheidung "welche Fläche ist denn nun weiter weg" nicht ganz eindeutig ist.

Dann belasse sie einfach unsortiert an ihrer Position in der Liste/Array und vergleiche die restlichen Flächen.

Das hat bei mir immer funktioniert und liegt daran das zwei sich nicht klar zu sotierenden Flächen zwangsläufig in der selben Ebene liegen
und es daher auch egal ist in welcher Reihenfolge sie gerendert werden.

Wenn es nicht klapt kein Problem ich stehe gerne für Beschwerden zur Verfügung. :lol:

Happy rendering

Joshy

Re: Im Raum: Quadrat verdeckt teilweise Quadrat?

Verfasst: 12.12.2010 21:46
von STARGÅTE
D.J.Peters hat geschrieben: Jetzt nimmst Du alle Flächen die den Sichtbarkeitstest bestanden haben (Normale.Z >=0) und packst sie bzw. desses Index in die Liste/Array der sichbaren Flächen.

Nun sotierst Du die verbleibenden Flächen entsprechend ihrer Z Komponennten ((z1+z2+z3+z4)*0.25) = das Zentrum der Fläche.
[...]
Das hat bei mir immer funktioniert und liegt daran das zwei sich nicht klar zu sotierenden Flächen zwangsläufig in der selben Ebene liegen und es daher auch egal ist in welcher Reihenfolge sie gerendert werden.
hm, meiner Meinung nach reicht es nicht die Normalen/Zentren der Flächen zu sortieren.
Beispiel (von "oben" gesehen) unten ist also die Kamera:
Bild

Vllt hab ich es ja nun auch falsch verstanden, aber hier ist das Zentrum der rechten Fläche hinter dem Zentrum der linken Fläche, trotzdem muss die linke zuerst gerender werden.

Re: Im Raum: Quadrat verdeckt teilweise Quadrat?

Verfasst: 13.12.2010 23:19
von CSHW89
D.J.Peters hat geschrieben:
CSHW89 hat geschrieben:funktioniert nicht, habs probiert, oder ich habs falsch verstanden. denn wenn eine fläche fast nach oben zeigt, wie hier z.b. die weißen flächen, kommt die Flächennormale ja nicht so weit zum betrachter hin. eine fläche die dahinter ist, und zum betrachter hinzeigt, hat doch dann eine normale, die ggf. näher zum betrachter liegt (ist schwierig zu erklären, was ich meine, oder wie gesagt, ich habs falsch verstanden).
Dir ist schon klar das eine Flächennormale allein keine Position hat sondern "nur" das normierte* Ergebnis einer Rotation ist.

*Die Länge ist immer 1 und der Ursprung liegt immer im Zentrum des Koordinatensystems.

Wenn die Z Vektorkommponente der Flächennormale negativ ist dann Zeigt die Fläche weg vom Betrachter/Kamera und muss daher nicht gerendert werden.

Jetzt nimmst Du alle Flächen die den Sichtbarkeitstest bestanden haben (Normale.Z >=0) und packst sie bzw. desses Index in die Liste/Array der sichbaren Flächen.

Nun sotierst Du die verbleibenden Flächen entsprechend ihrer Z Komponennten ((z1+z2+z3+z4)*0.25) = das Zentrum der Fläche.
ja das ist mir schon klar. ich hab nur geglaubt, dass das so nicht funktioniert, konnte es aber nicht mit einem beispiel zeigen. das hat mir ja jetzt stargate abgenommen :mrgreen:

lg kevin

Re: Im Raum: Quadrat verdeckt teilweise Quadrat?

Verfasst: 14.12.2010 00:34
von D.J.Peters
Hallo STARGÅTE,
da hast Du natürlich Recht
aber geht hier um einen Zauberwürfel ohne sich überlagernde oder durchdringende Flächen.

Bei Deiner skizzierten Aufgabenstellung würde man einen Z-Buffer Renderer nehmen (siehe weiter oben).

Grüsse Joshy