RenderMode?



  • Die hast für jedes Vertex einen Normalvektor nehme ich an, oder?
    Außerdem muß du glShadeModel(GL_SMOOTH) setzen.



  • Ich find' es nicht gut, daß renderMan einfach so grundlos ignoriert wird... 🤡



  • das zweite war ich nicht!!!
    das war jemand anderers der mich gefaked hat! 😡👎



  • Hm... man kann direkt beim Rendermode auf Wireframe umstellen???
    Kann mir das vielleicht jemand kurz beschreiben?



  • dazu müssten wir zuerst wissen um was für ein objekt es sich handelt bzw. ob du normalen per polyon oder per vertex berechnest. mit dem rendermode hat es imho nichts zu tun. es sei denns du hast auf wireframe umgestellt

    Mein Objekt besteht aus tausenden von dreiecken. Die Normalen werden per Vertex berechnet. Dann habe ich jedem Dreieck die Normale zugeordnet. Das sieht dann bei mir ungefaehr so aus:

    //Normale
                                    glNormal3d (    Normale_x_End[Init_d],
                                                    Normale_y_End[Init_d],
                                                    Normale_z_End[Init_d]);
                                    //Punkt1
                                    glVertex3f (    Data_vertex_x[Init_a],
                                                    Data_vertex_y[Init_a],
                                                    Data_vertex_z[Init_a]);
                                    //Punkt2
                                    glVertex3f (    Data_vertex_x[Init_b],
                                                    Data_vertex_y[Init_b],
                                                    Data_vertex_z[Init_b]);
                                    //Punkt3
                                    glVertex3f (    Data_vertex_x[Init_c],
                                                    Data_vertex_y[Init_c],
                                                    Data_vertex_z[Init_c]);
    

    Wie bekomme ich da nun eine weichen Farbverlauf hin??? glShadeModel(GL_SMOOTH) hab ich auch schon gesetzt.

    Anne



  • Bist du nun die Anne von www.akreft.de oder nicht?
    antworte bitte!!


  • Mod

    anne schrieb:

    dazu müssten wir zuerst wissen um was für ein objekt es sich handelt bzw. ob du normalen per polyon oder per vertex berechnest. mit dem rendermode hat es imho nichts zu tun. es sei denns du hast auf wireframe umgestellt

    Mein Objekt besteht aus tausenden von dreiecken. Die Normalen werden per Vertex berechnet. Dann habe ich jedem Dreieck die Normale zugeordnet. Das sieht dann bei mir ungefaehr so aus:

    //Normale
                                    glNormal3d (    Normale_x_End[Init_d],
                                                    Normale_y_End[Init_d],
                                                    Normale_z_End[Init_d]);
                                    //Punkt1
                                    glVertex3f (    Data_vertex_x[Init_a],
                                                    Data_vertex_y[Init_a],
                                                    Data_vertex_z[Init_a]);
                                    //Punkt2
                                    glVertex3f (    Data_vertex_x[Init_b],
                                                    Data_vertex_y[Init_b],
                                                    Data_vertex_z[Init_b]);
                                    //Punkt3
                                    glVertex3f (    Data_vertex_x[Init_c],
                                                    Data_vertex_y[Init_c],
                                                    Data_vertex_z[Init_c]);
    

    Wie bekomme ich da nun eine weichen Farbverlauf hin??? glShadeModel(GL_SMOOTH) hab ich auch schon gesetzt.

    Anne

    du müßtest für jeden vertex eine normale bestimmen und nicht pro dreieck nur eine. das machst du z.B. indem du an jedem vertex alle normalen der angrenzenden dreiecke aufaddierst und am ende dann normalisierst.

    rapso->greets();



  • 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


Anmelden zum Antworten