Ebenen und Geraden darstellen
ingobar
- grafik
Hallo,
ich versuche mich an einem einfachen Plotter für Ebenen und Geraden, der die Anforderungen in der Schule erfüllt.
Bislang habe ich folgenden Ansatz:
http://www.ingo-bartling.de/mathe/allg/html/simple3dplotter/plotter.html
Mein Problem ist nun folgendes: Wie ihr vielleicht erkennt, ist die Gerade nicht korrekt eingezeichnet, da sie ja durch die Ebene durchstößt. Sie müsste also teilweise verdeckt sein. Das aktuelle Erscheinungsbild liegt einfach daran, dass ich die Gerade als zweites zeichnen lasse und sie damit über die Ebene gemalt wird.
Wie kann ich das ändern?
Gibt es nur die Möglichkeit den Durchstoßpunkt zu berechnen und nur den sichtbaren Bereich zeichnen zu lassen?
Wie könnte man den generell feststellen wer "vorne" und wer "hinten" liegt. Denn bei der Vorstellung, dass jemand mehrere Ebenen und Geraden zeichnen lässt, wird mir schon ganz schummrig.
Im Zweifelsfall werde ich wohl mehrere Plotter für diverse Spezialfälle bauen. Aber vielleicht kennt ihr ja eine Lösung.
Hallo !
Also, irgendwie muss der Mensch Deinem Programm sagen, in welcher Ebene was gezeichnet wird. Und wenn Du dann das alles zeichnest, dann sortiere vorher die Ebenen hintereinander und beginne mit der hintersten. Also so wie beim Malen eines Bildes, wo man zuerst den Himmel, dann die Bäume und dann das Häuschen malt, das vor den Bäumen steht.
Ich hoffe, Du siehst jetzt den Wald vor lauter Bäumen nicht mehr ;-)
Gruß
Hans
Leider gibt es aber kein eindeutiges Vor- oder hintereinander. Ein Teil der Beispielebene liegt davor, ein Teil dahinter. Das ist ja mein Problem.
Hi ingobar!
Leider gibt es aber kein eindeutiges Vor- oder hintereinander. Ein Teil der Beispielebene liegt davor, ein Teil dahinter. Das ist ja mein Problem.
Du hast dann nur die Möglichkeit, die Schnittpunkte zu berechnen. Am besten legst du dir zusätzlich noch zu jedem Objekt einen Z-Index an, der dir sagt, in welcher Reihenfolge gezeichnet werden muss.
MfG H☼psel
Hello out there!
Am besten legst du dir zusätzlich noch zu jedem Objekt einen Z-Index an, der dir sagt, in welcher Reihenfolge gezeichnet werden muss.
Nein, nicht für jedes Objekt, sondern für jeden Pixel: Z-Buffer
See ya up the road,
Gunnar
Hi Gunnar!
Am besten legst du dir zusätzlich noch zu jedem Objekt einen Z-Index an, der dir sagt, in welcher Reihenfolge gezeichnet werden muss.
Nein, nicht für jedes Objekt, sondern für jeden Pixel: Z-Buffer
Nein, für jedes Objekt. Ich habe den Begriff Z-Index absichtlich so gewählt. Aber man sollte ihn nicht mit dem Z-Buffer verwechseln.
MfG H☼psel
Hi Gunnar!
Am besten legst du dir zusätzlich noch zu jedem Objekt einen Z-Index an, der dir sagt, in welcher Reihenfolge gezeichnet werden muss.
Nein, nicht für jedes Objekt, sondern für jeden Pixel: Z-BufferNein, für jedes Objekt. Ich habe den Begriff Z-Index absichtlich so gewählt. Aber man sollte ihn nicht mit dem Z-Buffer verwechseln.
MfG H☼psel
Ich denke schon, dass ich mit Z-Buffer arbeiten muss. Der Z-Index reicht für die Ebene oder die Gerade reichen ja nicht. Denn bei Vertauschen der Zeichenreihenfolge klappt es auch nicht.
Ich hatte ursprünglich gedacht, dass ich die x1-Koordinate als Tiefeninformation nehmen kann, aber das funktioniert halt nicht, wenn ich die Grafik auch noch drehen will.
Ehrlich gesagt bin ich jetzt dann doch ein wenig von dem Aufwand überrascht den man treiben muss um eine 3d-Darstellung zu bekommen. Da wundert es dann einen nicht mehr, dass entsprechende Software so teuer ist.
Mal schauen, ob ich es überhaupt weitermache oder nicht einfach ein paar Spezialfälle rausnehme (Schnitt zweier Ebenen, Lage zweier Geraden, Schnitt einer Ebene mit einer Geraden)
Dennoch danke für eure Tipps
Hallo ingobar,
wenn es dir nicht nur um Webseiten geht, sondern um 3d-Grafiken allgemein, kann ich dir http://www.opengl.org/ und http://www.povray.org/ empfehlen. Ich habe vor Jahren mal mit OpenGL experimentiert, dabei ist das hier herausgekommen: http://www.uni-muenster.de/Physik.AP/Purwins/Gruppe/Berkemeier/wr.avi (Achtung, ca. 10MB avi).
Gruß, Jürgen
Hello out there!
wenn es dir nicht nur um Webseiten geht, sondern um 3d-Grafiken allgemein, kann ich dir http://www.opengl.org/ und http://www.povray.org/ empfehlen.
Dann tut es aber vielleicht auch X3D oder VRML. Entsprechende Viewer gibt es als Browser-Plugin oder Stand-alone for free.
See ya up the road,
Gunnar
Hi ingobar!
Ich denke schon, dass ich mit Z-Buffer arbeiten muss. Der Z-Index reicht für die Ebene oder die Gerade reichen ja nicht. Denn bei Vertauschen der Zeichenreihenfolge klappt es auch nicht.
Ihr wollt mich nicht verstehen, oder? :)
Natürlich kannst du dir Objekt nicht so nehmen, wie du sie bekommst.
Nehmen wir an du hast eine Gerade, die in eine Ebene hineinsticht. Du ermittelst den Schnittpunkt, legst dir ein neues Objekt der Gerade, die nun nur noch bis zum Schnittpunkt reicht, gibst ihr den Z-Wert 1 und der Ebene den Z-Wert 0.
Nun zeichnest du von unten nach oben. Also erst die Ebene, dann die Gerade.
Ich hoffe, ich habe keinen Denkfehler gemacht. (Wäre ja nichts neues. -.- )
MfG H☼psel