RenderMode?
-
Hallo Leute,
ich habe am Wochenende mein Objekt mit der Beleuchtung versehen. Soweit alles ganz klar und sieht auch supi aus. Nun aber folgendes Problem: Das Objekt ist nicht glatt, das heisst, man kann die einzelnen Polygone erkennen.
Wie kann ich das beseitigen. Hat das etwas mit glRenderMode zu tun?
Anne.
-
Bist du die Anne von der Homepage hier?
http://www.akreft.de/Ja oder nein?
-
wenn ja, darf ich dich mal kurz anficken??
-
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
-
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!!
-
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?
-
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ß?????
-
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 setzenfü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 ****** ?
-
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.