Seite 1 von 2
Im Raum: Quadrat verdeckt teilweise Quadrat?
Verfasst: 10.12.2010 23:11
von CSHW89
Hi Leute,
ich hab mal wieder ein kleines problem. ich programmiere grad ein kleines programm, in dem ich 3D -> 2D projektionen benutze, um einen würfel zu zeichnen. nun bin ich auf folgendes problem gestoßen:

wie man sieht, werden zwei schwarze flächen
nach der weißen bzw. gelben fläche gezeichnet, was natürlich falsch ist.
so ich werd hier jetzt kein code posten, da er erstens viel zu groß ist, und zweitens in java geschrieben ist.
ich möchte eigentlich nur eine antwort auf folgende frage:
Wie findet man heraus, ob eine fläche (in meinem fall nur ein quadrat), eine andere fläche teilweise verdeckt?
Gegeben ist dabei die Position der Kamera (die Richtung zeigt immer auf den Nullpunkt (0,0,0)), und die Positionen der beiden Quadrate im Raum.
ich benutze grad die methode: zeichne quadrat zuerst, welches eine ecke besitzt, die am weitesten von der kamera entfernt ist. aber das scheint ja nicht so hundertprozentig zu funktioneren.
Hat da jemand ne idee, oder vielleicht i-was im internet entdeckt. hab schon verzweifelt gesucht.
danke schon mal
lg kevin
Re: Im Raum: Quadrat verdeckt teilweise Quadrat?
Verfasst: 10.12.2010 23:20
von DrShrek
Hier ein Zauüerwürfel mit PureBasic und er MP3D entwickelt.
Sourcen liegen dabei.
http://www.morty-productions.de/gamedev ... php?tid=12
Re: Im Raum: Quadrat verdeckt teilweise Quadrat?
Verfasst: 10.12.2010 23:34
von CSHW89
mit entity ist das ja auch nicht schwer
nein quatsch, habs auch schon mal programmiert. ich wollt aber jetzt ein applet entwickeln (deshalb java), und hab dazu grob die include von stargate genutzt:
http://www.purebasic.fr/german/viewtopi ... 10&t=22128
ich zeichne also alles selber mit polygonen auf einer 2d grafik.
jetzt hab ich halt nur das problem mit den überschneidenen flächen
lg kevin
Re: Im Raum: Quadrat verdeckt teilweise Quadrat?
Verfasst: 11.12.2010 00:03
von STARGÅTE
Also vorab mal:
echtes Schneiden zweier Flächen kannst du vermutlich per Hand eh nicht realisieren, weil sich ja dann beide Flächen druchdringen und die 4 neue Flächen errechnen musst.
Meine Idee zum Thema:
Du könntest für jeden Eckpunkt Prüfen, an welchen Koordinaten seine verlängerte Sichtlinie (von Camera zum Punkt) die jeweils andere Fläche durchdringt.
Wenn sich die beiden Flächen wirklich nicht durchdringen, reicht die Prüfung eines Eckpunkts mit der anderen Fläche, weil dann ja auch alle andere vor bzw hinter der Fläche liegen, und wenn nicht, dann könntest du eh nichts dagegen mache^^
Wäre dann der Schnittpunkt hinter dem Eckpunkt liegt, dann wird die andere Fläche zuerst gezeichnet, liegt er davor wird die Fläche mit dem Eckpuntk zuerst gezeichnet.
Das ganze ist also ähnlich deiner Methode, jedoch nicht mit zwei Eckpunkten, sonden nur einem, und der entsprechender Flächen-Sichtlinien-Punkt...
ich hoffe du verstehst was ich meine ^^
Re: Im Raum: Quadrat verdeckt teilweise Quadrat?
Verfasst: 11.12.2010 00:58
von CSHW89
so hab mal endlich auch was gefunden. stichwort: Sichtbarkeitsalgorithmus
ist wir aber alles viel zu komplex für so ein simples problem.
deshalb werd ich wohl stargates vorschlag nehmen. danke dafür

. hatte nach längerem überlegen dieselbe idee
erstmal, die flächen durchdringen sich nicht, deshalb is es schon mal viel leichter, da haste recht. nur das mit
einer ecke versteh ich nicht. es kann doch sein, dass nur eine ecke von einem vorderen quadrat verdeckt wird (wie z.b. bei dem schwarzen quadrat oben: ok, da sind's zwei ecken). ich muss also alle vier ecken einen quadrats prüfen, oder vertuh ich mich da grad.
lg kevin
Re: Im Raum: Quadrat verdeckt teilweise Quadrat?
Verfasst: 11.12.2010 01:22
von STARGÅTE
nur das mit einer ecke versteh ich nicht. es kann doch sein, dass nur eine ecke von einem vorderen quadrat verdeckt wird
Jo, klar, eine Ecke, wo dahinter oder Davor garnicht die Fläche ist, mit der Verglichen werden soll, dann kannst du diese natürlich nicht nutzen. Hast du aber erst mal eine gefunden, dann brauchst du keine weitere Testen.
Problem wäre dann auch wenn Zwei flächen genau übereinander liegen um 45° gedreht, dann würde keine Ecke die jeweils andere Fläche über die Sichtstrahlen Schneiden.
Dort müsste man u.u. auch noch das Zemtrom vergleichen.
Re: Im Raum: Quadrat verdeckt teilweise Quadrat?
Verfasst: 11.12.2010 01:42
von CSHW89
STARGÅTE hat geschrieben:Problem wäre dann auch wenn Zwei flächen genau übereinander liegen um 45° gedreht, dann würde keine Ecke die jeweils andere Fläche über die Sichtstrahlen Schneiden.
Dort müsste man u.u. auch noch das Zemtrom vergleichen.
ja stimmt, ich werd das, denk ich, aber so machen, dass wenn keine ecke unter den quadrat liegt, ich meine alte methode verwende. ich brauch nämlich eine reihenfolge, auch wenn sich die quadrate nicht überdecken. die ist ja soweit dann korrekt.
lg kevin
Re: Im Raum: Quadrat verdeckt teilweise Quadrat?
Verfasst: 11.12.2010 09:36
von DarkDragon
Tiefenpuffer wär doch am besten und am einfachsten.
Re: Im Raum: Quadrat verdeckt teilweise Quadrat?
Verfasst: 11.12.2010 12:08
von D.J.Peters
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.
Da das Dot Produkt zwischen Flächennormale und einer gedachten Lichtquelle dem Cosinus entspricht
kannst Du die Flächennormale auch prima zum Bestimmen der Helligkeit einer Fläche verwenden
das sieht dann noch plastischer im Raum aus.
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.
Aber wie immer; es führen viele Wege nach Rom.
Sollte etwas unklar sein dann Frage ruhig nach.
Ich habe den ganzen 3D Software Kram "noch" abrufbar im Kopf.
(Raytracer, Texturemapping, Stencilshadow, Radiosity, Photonmapping, Bumpmapping etc.)
Grüsse Joshy
Re: Im Raum: Quadrat verdeckt teilweise Quadrat?
Verfasst: 11.12.2010 17:40
von Riacon
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