RenderMode?



  • Bis jetzt habe ich also zu jedem Dreieck eine Normale berechnet. Dies habe ich nach folgendem Schema
    gemacht:

    Bei 3 Punkten (P1, P2, P3) in einem Raum kann man von einem Punkt 2 Vektoren (V1 und V2) bilden.
    Von P1 nach P2 und von P1 nach P3. Um nun die Normale zu erhalten müssen wir von diesen Vektoren das
    Kreuzprodukt (V3 = V1 X V2) berechnen. Daraus resultiert ein neuer Vektor (V3), der unsere Normale darstellt.

    Das Kreuzprodukt wird folgendermaßen berechnet

    Normalx = (vtx1y - vtx2y) * (vtx2z - vtx3z) - (vtx1z - vtx2z) * (vtx2y - vtx3y)
    Normaly = (vtx1z - vtx2z) * (vtx2x - vtx3x) - (vtx1x - vtx2x) * (vtx2z - vtx3z)
    Normalz = (vtx1x - vtx2x) * (vtx2y - vtx3y) - (vtx1y - vtx2y) * (vtx2x - vtx3x)

    Anne

    Wenn ich nun aber nur einen Punkt P1 (x,y,z) habe, wie muss ich dann die normale berechnen?


  • Mod

    rapso schrieb:

    ...das machst du z.B. indem du an jedem vertex alle normalen der angrenzenden dreiecke aufaddierst und am ende dann normalisierst.

    rapso->greets();



  • Ja aber es muss doch auch eine Moeglichkeit (Gleichung) geben, mit welcher ich direkt nach dem einlesen der Punkte die Normalen zu diesen berechnen kann, oder. Ich gehe jetzt davon aus, das ich noch keine Normalenberechnung fuer irgendwelche Dreiecke ausgefuehrt habe.



  • moin

    😡 wann wird den Unregistrierten Usern das Posten verboten??? So langsam nervt dat.

    renderMan schrieb:

    wenn ja, darf ich dich mal kurz anficken??

    Was sollen dieser Scheiß?????


  • Mod

    Anne schrieb:

    Ja aber es muss doch auch eine Moeglichkeit (Gleichung) geben, mit welcher ich direkt nach dem einlesen der Punkte die Normalen zu diesen berechnen kann, oder. Ich gehe jetzt davon aus, das ich noch keine Normalenberechnung fuer irgendwelche Dreiecke ausgefuehrt habe.

    ist doch eine einfache gleichung

    für alle dreiecke:
    normale berechnen
    normale auf eckpunkt 1 addieren
    normale auf eckpunkt 2 addieren
    normale auf eckpunkt 3 addieren
    //nicht vergessen am anfang die normalen der eckpunkte auf 0|0|0 zu setzen

    für alle eckpunkte:
    normalisieren

    //wobei das entfallen kann falls du glEnable(GL_NORMALIZE) benutzt.

    rapso->greets();



  • Danke Rapso, hat geklappt ... obwohl die berechnung ja auch einfacher gehen wuerde.

    double		x = 16.548052 , y = -31.02938, z= 21.721382;
    	double		test;
    
    	double		Erg1[10], Erg2[10], Erg3[10], Erg4[10]
    		         Erg5[10], Erg6[10], Erg7[10], Erg8[10];
    
    	Erg1[0] = (x * x);
    	Erg2[0] = (y * y);
    	Erg3[0] = (z * z);
    
    	Erg4[0] = sqrt(Erg1[0] + Erg2[0] + Erg3[0]);
    
    	Erg5[0] = (x/Erg4[0]);
    	Erg6[0] = (y/Erg4[0]);
    	Erg7[0] = (z/Erg4[0]);
    

    auf jeden fall ein dickes danke. 🙂

    Anne



  • so können wir jetzt ****** ?


  • Mod

    Anne schrieb:

    ...hat geklappt ...
    auf jeden fall ein dickes danke. 🙂

    Anne

    wie wäre es mit nem screenshot? *g*

    rapso->greets();



  • Wuerd ich ja gern machen, aber da haben hier ein paar leute was dagegen ... wenn du willst, kannst mir an AnneK@gmx.de deine Adresse schicken. Lasse dir dann mal was zukommen.

    Bis dahin. 😉
    Anne.



  • ???? schrieb:

    so können wir jetzt ****** ?

    Gibt es hier keine IP-Sperre? 😡



  • Guten Morgen,

    nun doch noch ein kleines Problem hinisichtlich der Beleuchtung:

    Wenn ich pro Dreieck ein Normale berechne und anschliessend mit

    glEnable(GL_LIGHTING)
    

    usw. ein Licht definiere, dann behaelt die Lichtquelle ihre Poition beim bewegen des Objektes.

    Wenn ich nun aber pro Vertex eine Normale berechne, dann haut das mit der Beleuchtung nicht mehr so ganz hin. Wenn ich das Objekt bewege (Rotation oder Translation) dann veraendert sich auch die Lichtquellenposition. Am Beispiel von einem Spotlicht sieht das so aus: beim ersten Fall(Normale pro Dreieck) habe ich immer exakt den selben Punkt, auf dem mein Spot auftrifft. Dieser bleibt auch da, wenn ich das Objekt drehe. Wenn ich nun aber pro Vertex eine Normale habe, dann sieht das so aus: wenn das Objekt nach rechts gedreht wird (also gegen Uhrzeigersinn), dann bewegt sich der Spot nach Links, bis er dann hinter dem Objekt verschwunden ist.

    Wie kann ich nun erreichen, das der Spot auf meinem Punkt bleibt???

    Anne

    PS: Nicht AnneK@gmx.de sondern AnneK3@gmx.de


  • Mod

    die position und richtung der lichtquelle sollte von der transformation mitbeeinflusst werden, wenn du also erst die transformation setzt und dann die lichtquelle und deine dreiecke, dann bleiben die in relation zueinander gleich, weil sie mit der selben lichtquelle transformiert werden.

    du hast also vielleicht die reihenfolge wie du die matrizen,lichtquellen und dreiecke setzt verändert und dadurch kommt der unterschied zwischen pervertex-normal und perface-normal zusatende.

    rapso->greetS();



  • Das ist ja eben das Problem. Ich habe lediglich die Berechnung der Normalen fuer jeden Punkt durchgefuehrt. Die Initialisierung der Lichtquelle habe ich so gelassen, wie ich sie zu Beginn (Normale nur fuer Dreieck) hatte.

    Wenn ich z.B. nur das Licht aktiviere und keine Lichtquelleneigenschaften und Materialeigenschaften setze, dann sollte doch die Beleuchtung immer gleich sein (Postition habe ich ja auch keine Angegeben). Ist sie aber nicht ... heul.

    Wenn ich das Objekt neige, wird es zur einen Richtung schwarz, und zur anderen Richtung weiss.

    Kann es auch sein, das ich mit der Berechnung der Normalen fuer jeden Punkt weniger Details erkennen kann, als wenn ich die Berechnung der Normalen fuer jedes Dreieck durchfuehre????

    Anne



  • FireYourGuns schrieb:

    Gibt es hier keine IP-Sperre? 😡

    Was soll das bringen?!? 🙄


  • Mod

    du hast ne (spot)lichtquelle aber hast keine position angegeben? dann müßte die standart postion genommen werden, schätze ich, und das wäre 0|0|0 ...

    die normalen tragen eigentlich nicht zur genauigkeit von meshes bei, dazu müßte das mesh mehr dreiecke haben damit es detailreicher ist. aber die normalen sind dafür da dass man für einen eckpunkt die lichtintensität berechnen kann. das heißt natürlich, dass die farbe von den ecken interpoliert wird und du für ein grob aufgelöstes object nicht wirklich eine gute belechtung bekommen kannst.

    rapso->greets();



  • Sgt. Nukem schrieb:

    Was soll das bringen?!? 🙄

    Das solche Leute wie oben nicht hier posten können? Man bekommt ja nicht unbedingt jedes mal ne andere IP.

    Gibt's beim GSPB auch 🙄



  • FireYourGuns schrieb:

    Das solche Leute wie oben nicht hier posten können? Man bekommt ja nicht unbedingt jedes mal ne andere IP.

    Stimmt, würde sicher in 1/2^16 Fällen zufällig klappen und in nur 10/2^16 Fällen den Falschen erwischen.


  • Mod

    sowat sollte man für alle invisible machen, außer für die IP, die es geposted hat... damit er sich darüber dann freuen kann und immer neu einwählen bloss um zu sehen ob das schon für alle anderen IPs invisible ist... wer hat es denn schon so nötig zu trollen?

    rapso->greets();



  • FireYourGuns schrieb:

    Sgt. Nukem schrieb:

    Was soll das bringen?!? 🙄

    Das solche Leute wie oben nicht hier posten können? Man bekommt ja nicht unbedingt jedes mal ne andere IP.

    Gibt's beim GSPB auch 🙄

    TGGC schrieb:

    Stimmt, würde sicher in 1/2^16 Fällen zufällig klappen und in nur 10/2^16 Fällen den Falschen erwischen.

    😃 Schließe mich voll und ganz TGGC an...


Anmelden zum Antworten