Im Raum: Quadrat verdeckt teilweise Quadrat?

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Im Raum: Quadrat verdeckt teilweise Quadrat?

Beitrag 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
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Im Raum: Quadrat verdeckt teilweise Quadrat?

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Im Raum: Quadrat verdeckt teilweise Quadrat?

Beitrag 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
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Im Raum: Quadrat verdeckt teilweise Quadrat?

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
D.J.Peters
Beiträge: 87
Registriert: 28.11.2010 13:07
Computerausstattung: P4 2x3.2GKz.1GB WIXP 32Bit NVIDEA GT240 1GB DDR3, AMD XP 1.8GHz Linux 32Bit NVIDEA GT240 TIi3200
Wohnort: Germany
Kontaktdaten:

Re: Im Raum: Quadrat verdeckt teilweise Quadrat?

Beitrag 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
PS. meine vielen Fehler der Rechtschreibung auf dem Forum könnt Ihr gerne ignorieren.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Im Raum: Quadrat verdeckt teilweise Quadrat?

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Im Raum: Quadrat verdeckt teilweise Quadrat?

Beitrag 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
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
D.J.Peters
Beiträge: 87
Registriert: 28.11.2010 13:07
Computerausstattung: P4 2x3.2GKz.1GB WIXP 32Bit NVIDEA GT240 1GB DDR3, AMD XP 1.8GHz Linux 32Bit NVIDEA GT240 TIi3200
Wohnort: Germany
Kontaktdaten:

Re: Im Raum: Quadrat verdeckt teilweise Quadrat?

Beitrag 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
PS. meine vielen Fehler der Rechtschreibung auf dem Forum könnt Ihr gerne ignorieren.
Antworten