.| Autor | Beitrag |
|---|---|
|
000 12.08.2003, 12:46 the_viking |
Ich hab im meiner Terrain-Engine das Problem, das ich keine Normalen für die Beleuchtung des Terrains habe. Deswegen möchte ich gerne erfahren, wie man Vertexnormalen berechnet (für jeden Punkt auf der Heightmap eine Normale). Kann mir jemand einen Tipp geben? ( Ich möchte nicht irgendwie anfangen mit Dreiecken bzw. Polygonen zu hantieren, denn es muss doch eine einfach Lösung geben, die Normale aus den umliegenden Punkten des Punktes, von dem ich die Normale berechnen will, zu berechnen! )
thx, cu, MfG the_viking (( My =]=H=O=M=E=> Page! )) |
|
Profil || Suche |
|
001 12.08.2003, 18:58 the_viking |
Kann hier KEINER Vertexnormalen berrechnen??? --thx, cu, MfG the_viking (( My =]=H=O=M=E=> Page! )) |
|
Profil || Suche |
|
002 12.08.2003, 21:33 theDon |
wie wäre es mit `will niemand dir die lösung in den arsch schieben?' ? --\o tanz den naziprau! o/ And more than ever, I hope to never fall, |
|
Profil || Suche |
|
003 13.08.2003, 02:36 sth |
http://www.flipcode.com/ -> Message Center -> Search --"Gotta admit that I'm a little bit confused |
|
Profil || Suche |
|
004 13.08.2003, 11:05 Nicemice Moderator |
Naja, du weißt doch sicher, wie man von einer Ebene eine Normale berechnet. www.d3opencoop.com - A Doom3 Cooperative Mod |
|
Profil || Suche |
|
005 13.08.2003, 15:41 the_viking |
lol.... 3 Punkte passen noch in ne Ebene, wenn ich aber mehr nehme, hab ich das Prob, das die nicht zwangsläufig (bzw nur in SEHR seltenen Fällen) in einer Ebene liegen... Ein bisschen logisches Denken wäre net schlecht... @sth: Danke. Ich benutzt jetzt einfach die Normalen eines Dreiecks als Vertexnormale. Ist zwar net 100% acc., aber es sieht ordentlich aus. --thx, cu, MfG the_viking (( My =]=H=O=M=E=> Page! )) |
|
Profil || Suche |
|
006 13.08.2003, 15:52 TheVoice |
Äh, was? In eine Ebene passen unendlich viele Punkte, das nur nebenbei. Die Punkte für deine Ebene (wie Nicemice meinte) hast du doch vorgegeben durch ein Triangle. Wenn du nun die Normale zu einem Vertex willst, nimmst du alle Normalen der Ebenen, die diesen einen Vertex (Punkt) schneiden und errechnest das Mittel. Dürfte eigentlich klappen. --Against TCPA | Resourcecode.de | Blender 3D | [ Darkzone | Pandorra | Alpine ] |
|
Profil || Suche |
|
007 13.08.2003, 17:06 the_viking |
Die 4 Punkte thx, cu, MfG the_viking (( My =]=H=O=M=E=> Page! )) |
|
Profil || Suche |
|
008 13.08.2003, 18:11 Nicemice Moderator |
Lies nochmal durch was TheVoice geschrieben hat und denke darüber nach. --www.d3opencoop.com - A Doom3 Cooperative Mod |
|
Profil || Suche |
|
009 13.08.2003, 19:55 the_viking |
LoL so mache ich das ja schon... --thx, cu, MfG the_viking (( My =]=H=O=M=E=> Page! )) |
|
Profil || Suche |
|
010 13.08.2003, 22:34 Chronial |
Dürfte man nach einer Definition con Vertex fragen, und was eine Normale ist? "tsuji-giri" (japanisch) - ein neues Schwert an einem Passanten ausprobieren |
|
Profil || Suche |
|
011 13.08.2003, 23:07 Bluthund |
ein Vertex ist nichts weiter als ein Punkt /edit: ohoh nachdem was the_viking hier unter mir postet muss ich meine sig ändern =) --The C language combines all the power of assembly language with all the ease-of-use of assembly language. Dieser Beitrag wurde am 13.08.2003 um 23:16 von Bluthund bearbeitet. |
|
Profil || Suche |
|
012 13.08.2003, 23:10 the_viking |
Eigendlichs sollte man geschlagen und gesteinigt werden, aber da dies ja ein überaus NETTES Forum ist, geb ich dir mal ne Antwort: Vertex: Normale: Vektor a zeig in richtung x-Achse und Vektor b zeigt in richtung z-Achse. x = Kreuzprodukt --thx, cu, MfG the_viking (( My =]=H=O=M=E=> Page! )) |
|
Profil || Suche |
|
013 14.08.2003, 00:09 Leviathan |
Die Normale ist nicht der Vektor, der senkrecht zu 2 anderen (im 3-Dimensionalen) steht, sondern einer der Vektoren, die senkrecht stehen. Es gibt unendlich viele Normalen von 2 Vektoren, sie unterscheiden sich durch den Betrag und die Orientierung, aber nicht durch die Richtung. Wie man das Kreuzprodukt berechnet, hängt natürlich von der Form ab, in der man die Vektoren vorliegen hat. Normal hat in der Mathematik (zumindest in der Geometrie) fast immer etwas mit senkrecht / orthagonal zu tun. --Entities: HL | HL² |
|
Profil || Suche |
|
014 14.08.2003, 20:53 McMapper |
Nunja mal sehn ob ich die vorgehensweise verstanden habe, du hast also einen Vertex in der Mitte und 8 angrenzende, macht 8 Dreiecke (sprich Ebenen) von denen du den Normalenvektor errechnest. Dann denke ich mal, normalisierst du die alle, addierst sie zusammen und hast somit ne gute Annäherung an den Normalenvektor des Punktes? Ist das nicht _etwas_ rechenintensiv? Ich empfehle dir, ne Prüffunktion irgend ne if blah schleife, wenn da 2 oder mehr der 8 umliegenden Punkte die gleiche "Höhe" (X-Koordinate oder whatever) haben, den Rest abzubrechen und direkt von dieser Ebene den Normalenvektor zu berechnen. Der wäre dann zumindest genau mfg [EDIT] Ja Moment mal, man _muss_ sogar ebenen bilden, wie will man von einem Vertex auch den Normalenvektor bestimmen, die hätten ja alle die selben Richtungen O_o. Anstatt, dass du dein Terrain aus Vertexen (Punktvektoren sind das doch oder? ) aufbaust, mach es viel mehr sinn, wenn die "kleinsten Einheiten" Dreieicke sind. Somit hast du dann auch kein Problem mit den Normalen[EDIT] mfg 2 Ja und nochwas, die Lösung, mit der Durchschnitts Normalen für einen Vertex , wie sähe das aus? Belichtet werden die Eckpunkte der Flächen? Wo gibts den sowas O_o. Nun ich weiss nicht, wie in Vertex-, Voxtel- oder wie auch immer Enginen die Beleuchtung geht (Raytrace?) aber dieses Mischmasch mit klassischen Polygon Techniken dürfte ned so optimal sein. Denk ich. Kann mich irren. hoffe aber trotzdem geholfen zu haben :) --Dieser Beitrag wurde am 14.08.2003 um 21:02 von McMapper bearbeitet. |
|
Profil || Suche |
|
015 14.08.2003, 23:12 theDon |
schleifen haben in programmiersprachen immer etwas mit wiederholungen zu tun. :-¢ -- \o tanz den naziprau! o/ And more than ever, I hope to never fall, |
|
Profil || Suche |
|
016 14.08.2003, 23:42 McMapper |
wie nennt man das dann? So ein "Einschub" halt.. wenn das, dann das ... :D -- |
|
Profil || Suche |
|
017 15.08.2003, 00:23 Chronial |
Das nennt sich if-Bedingnung. --"tsuji-giri" (japanisch) - ein neues Schwert an einem Passanten ausprobieren |
|
Profil || Suche |
|
018 15.08.2003, 09:46 the_viking |
LoL... Also @Mc: Aber wenn ich jetzt Pro Dreieck eine Normale hätte, dann sähe das aus wie Egoshooter aus dem Jahre '95... Flatshaded.. Und das sieht bei Terrain ziemlich sch..sse aus... Deswegen benutze ich Vertexnormalen, bei denen die Normalen der Vertexe beim rastern über das Dreieck hinweg interpoliert werden und damit jedes einzelne Pixel einen eigene Helligkeitswert bekommt anstatt das alle nur einen Helligkeitswert (den des Dreiecks) bekommen. Dann entstehen nämlich nicht diese Hässlichen Shading-Kanten an Polygonkanten. zu deinem mfg2: thx, cu, MfG the_viking (( My =]=H=O=M=E=> Page! )) |
|
Profil || Suche |
|
019 16.08.2003, 01:38 McMapper |
Nun, gut ein paar Missverständnisse aufgelärt ^^ Aber dennoch, irgendwie kapier ich nicht, wie das funktionieren soll. Wieviele Vertexe pro Dreieck wird es geben? Eine fixe Anzahl? Und je nach grösse des Polygons, nehmen auch die einzelnen Vertexte immer kleinere "Flächen" an. Ich meine auch, eine Fläche mit mathematischen Punkten zu rendern ist "komisch" ein Punkt hat ja eigentlich keine räumliche ausdehnung. Oder gilt dann der Helligkeitswert, der für einen Vertex errechnet wurde bei jedem Dreick je nach grösse für eine bestimmte fläche? (Diese Fläche, wie ist die dann beschaffen? Dreieck? Rund? Sprite? Dynamische Lightmap? ) Haben diese "Flächen" dann immer eine gleich grosse ausdehnung und du musst auch noch errechnen, wieviele von denen in ein Polygon reingerastert werden können? Fragen über Fragen. Hm, wenn ich mir deine Antwort nochmal durchlese, wenn du interpolieren willst wirst du trotzdem für jeden Vertex die selbe Normale bekommen wie für das grosse Dreieck, denn die Miniflächen, die du mit den umliegenden vertexen bilden wirst, werden alle genau die selbe "Schräglage" und somit die selbe Normale besitzen welche ja auch mit der des grossen Dreiecks identisch ist. Damit es nicht so flatshaded ausieht, müsstest du einfach schöne Übergänge zu den anderen grossen Dreicken und deren Farbwerten errechnen. Aber ob du dazu die ganze Vektor Hantiererei benötigst, weiss ich nicht. Evtl. habe ich aber auch nur wieder etwas falsch verstanden. Bitte um Aufklärung. :-)
mfg --Dieser Beitrag wurde am 16.08.2003 um 01:43 von McMapper bearbeitet. |
|
Profil || Suche |
|
020 16.08.2003, 16:24 Leviathan |
@theDon: Bei mir haben Schleifen in C sogar immer etwas mit for zu tun... Die Probleme von McMapper kann ich allerdings auch verstehen. In der Mathematik besteht ein Dreieck in R³ aus unendlich vielen Punkten. In C++ wird man R³ wahrscheinlich mit "double³" darstellen, damit gibt es immer noch genug Punkte in einem Dreieck um eine Lichtberechnung jedes einzelnen unmöglich zu machen (bei einer halbwegs akzeptablen Framerate). Eine Normale alleine reicht ja auch nicht aus, um eine Ebene zu beschreiben, da ja noch die wichtige Information fehlt, wo diese Ebene sich denn überhaupt befindet. Der Normalenvektor beschreibt also nur das, was McMapper als "Schräglage" bezeichnet hat. --Entities: HL | HL² |
|
Profil || Suche |
|
021 16.08.2003, 17:16 McMapper |
naja evtl kann er ja noch die Ebenegleichung ausrechnen lassen, mit einem Vertex kann man ja dann auch noch d ausrechnen. Dieses d kann er ja evtl auch zur Farbberechnung verwenden -- |
|
Profil || Suche |
|
022 18.08.2003, 11:36 the_viking |
Naja egal.... Schluss der Diskussion, hab eine Lösung gefunden: Normale wird aus dem Dreieck berechnet, das der Heightmappunkt an x,y sowie die Punkte x+1,y sowie x,y+1 bilden. Die werden zum Gouroudshading herangezogen und sieht ganz ordentlich aus, nur halt nicht perfekt ;). Aber ich hab im mom keine Lust alle Anliegenden Dreiecke mit Normale auszurechnen und den Durchschnitt zu bilden... --thx, cu, MfG the_viking (( My =]=H=O=M=E=> Page! )) |
|
Profil || Suche |

