hi, in dem Lichttutorial stand was davon wie man die normalen eines objektes glätten kann um weichere "schatten" zu bekommen, jedoch hab ich net ganz verstanden wie das gehen soll, berechne ich jetzt die normalen auf den kanten oder wie ?
Jo, ich nutz das für mein Terrain. Jeders (ausser die ganz aussen) Vertex gehört zu 4 Flächen, die jeweils aus 2 Dreiecken bestehen. Ich berechne da also Normalen für alle 4 (8) Flächen und setz normalisierte version des so errechneten Vectors als meine Normale für den Punkt. Zur Zeit bin ich dabei, da noch gewisse Faktoren einspielen zu lassen (Flächen deren Normale extrem anders als die der anderen sind rauslassen) um runde wie auch eckige Übergänge zu schaffen (damit ich runde hügel wie auch eckige Felsen und Riffs bauen zu können).
also bekommt jeder eckpunkt eine normale ? und zwar die durchschnittsnormale der umgebenden flächen ? bekommen die flächen dann keine mehr ? wie berechne ich das geschickt ?
Es gibt noch eine andere Möglichkeit. im grunde basiert sie darauf, wie für eine Pyramide die grundseite errechnet wird. Diese Grundseite steht dann genau im rechten Winkel zur Punktnormalen der Spitze.
Allerdings ist das in einem Terrain ja nicht unbedingt eine Pyramide, denn es kommt eigentlich dauernd vor, dass die 4 Punkte der Grundfläche keine Fläche beschreiben, da sie nicht in einer Ebene liegen. Dieses Problem wird folgendermaßen behoben:
Unsere Ebene hat 2 Eigenschaften: Sie verläuft durch den Punkt, dessen Abstand zur Spitze der kürzeste ist. (kann auch ein anderer sein, aber mit dem kürzesten mach ichs am liebsten) und die ebene steht orthogonal zur Normalen der Spitze.
Nun errechnet man sich seine Ebene aus den Angaben und bildet das Vektorprodukt aus ihren Spannvektoren und voila das Ergebnis ist der Normalenvektor der Ebene (= des Punktes).
Registriert: Sa Jun 06, 2009 16:13 Beiträge: 17 Wohnort: Künzelsau
Hatte mit den Normalen auch so meine Probleme...
Zum Beispiel stand da auch was von normalen glätten.
PhoenixGL hat geschrieben:
und dann noch glShadeModel(GL_SMOOTH);
gehe ich jetzt recht der Annahme das das mit diesem Befehl getan ist?
Ich wär echt enorm Dankbar für einen kleinen beispiel code, ich hab absolut keine Ahnug wie ich das in meinen Programmen umsetzensoll...
_________________ Wieso kann es nicht einfach funktionieren?
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Also für glShadeModel ist ein Beispiel im Wiki.
Wobei das nix mit den Normalen zu tun hat, sondern wie die Farbe auf die Fläche kommt. Aber das steht detailiert mit Beispiel im Verlinkten Artikel.
Im Wiki findest du nebenbei auch zu (fast) allen andern Befehlen eine Doku.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Sa Jun 06, 2009 16:13 Beiträge: 17 Wohnort: Künzelsau
ok,... um das nochmal zu rekapitulieren
das ich richtig verstanden werde: ich will nur von eckig zu rund mehr verlang ich gar nicht
um aus mein eckigen Objekt was schönes glattes zumachen reicht wenn ich für jeden Punkt meine mormale ausrechne und dann mit glnormalx setze und dann noch mit dem gl_Enable(GL_NORMALIZE) normalisiere.
Heißt das das reicht um die ganze geschichte zu "glätten"? Nix weiter?
_________________ Wieso kann es nicht einfach funktionieren?
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Dadurch sollte die Wirkung runder werden.
Falls das noch nicht reicht, könnte man auch etwas mehr Vertices benutzen. Je mehr Eckpunkte desto feiner die Rundung.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Sa Jun 06, 2009 16:13 Beiträge: 17 Wohnort: Künzelsau
Trotzdem gibt es bei mir immernoch ein Problem...
Habe versucht "ganz einfach" bei einer Pyramide die Spitze zu runden.
Nur seh ich davon nicht sehr viel; was mir irgend wie fehlt is wie ich die normale zu dem Punkt hintransferiere (glaub ich).
mathematisch mach ich das doch mit nem Stützvektor (nicht???).
Wenn ich mir allgemein ja meine Flächennormalen um meinen Punkt ausrechne hab ich doch nur Richtungsvektoren
bild ich aus denen das Mittel hab ich meine Punktnormale di aber im Ursprung steht....
Ich will ja nicht zu aufdringlich werden aber ein klitzekleiner Quellcode (gerade für so ne Pyramide) würde Welten bewegen
Der nächste der das für mich tut bekommt auch ne hübsche Postkarte
_________________ Wieso kann es nicht einfach funktionieren?
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Die Normalen stehen nirgendwo. Das sind nur Richtungsangaben die für die Lichtberechnung genutzt werden. Mach dir auch nicht zu große Hoffnungen bezüglich der Leistungsfähigkeit dieser Methode. Eine Runde Pyramide bekommst du damit nicht hin.
Wenn du schonmal Blender, 3DS Max oder ähnliches benutzt hast, dann kennst du vielleicht diese Option die Normalen zu gruppieren oder zu mitteln. Je nachdem sieht man dann z.B. bei einer Kugel die Flächen (sieht aus wie ne Diskokugel) oder nicht (rund).
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.