normalen
-
hi!
wie kann ich für mein terrain normalen erstellen?for(y=0; y < m_Height-1; ++y) { glBegin(GL_TRIANGLE_STRIP); for(x=0;x<m_Width-1;++x) { SetTextureCoord(x, y); glVertex3fv(m_vertexlist[(int)((y*m_Height)+x)].v); SetTextureCoord(x+1, y); glVertex3fv(m_vertexlist[(int)((y*m_Height)+(x+1))].v); SetTextureCoord(x, y+1); glVertex3fv(m_vertexlist[(int)(((y+1)*m_Height)+x)].v); SetTextureCoord(x+1, y+1); glVertex3fv(m_vertexlist[(int)(((y+1)*m_Height)+(x+1))].v); } glEnd(); }
ich hab es so probiert:
for(y=0; y < m_Height-1; ++y) { glBegin(GL_TRIANGLE_STRIP); for(x=0;x<m_Width-1;++x) { Vector3D normale; normale=CalcNormal(m_vertexlist[(int)((y*m_Height)+x)].v, m_vertexlist[(int)((y*m_Height)+(x+1))].v, m_vertexlist[(int)((y*m_Height)+(x+1))].v); glNormal3fv(normale.v); SetTextureCoord(x, y); glVertex3fv(m_vertexlist[(int)((y*m_Height)+x)].v); SetTextureCoord(x+1, y); glVertex3fv(m_vertexlist[(int)((y*m_Height)+(x+1))].v); SetTextureCoord(x, y+1); glVertex3fv(m_vertexlist[(int)((y*m_Height)+(x+1))].v); SetTextureCoord(x+1, y+1); glVertex3fv(m_vertexlist[(int)(((y+1)*m_Height)+(x+1))].v); } glEnd(); }
Die Normalenausrechrunktion funzt, aber irgendwie stimmt das trotzdem nicht? kann mir bitte wer helfen?
tyvm im vorraus!
see you
-
Hi,
sind Normalen nicht Senkrechte zu Tangenten?
Deinem Code kann ich nicht ganz folgen (Kommentare!), aber vielleicht hilft dir, das zwei Vektoren zu einander senkrecht stehen, wenn ihr Produkt (bzw. Skalar) 0 ergibt (das funktioniert auch im Raum, nur eben "betrachtungstechnisch" auf den x-Wert der zwei Punkte eines Vektors gepolt, soll heißen: nur auf die Fläche, deren Seiten diese beiden Vektoren sind).
Hoffe, das hilft.
Wenn nicht, dann versuche bitte mal deinen Code zu kommentieren, ich programmiere kein OpenGL.
-
normalen per poly oder per vertex?
per poly ist es das kreuzprodukt aus 2vectoren die die fläche aufspannen.
per vertex ist es die summe aller normalen der polys.oder hab ich deine frage nicht richtig verstanden?
rapso->greets();
-
ich weiß ja wie man eine normale für ein normales dreieck ausrechnet, aber wie macht man das bei einem triangle strip, wie ich ihn in dem code gepostet habe?
-
an sich sollte es dich nicht jucken wie die nun die polys zusammenhängen, du gehst einfach dumme schleifen durch
erste dumme schleife:
für alle vertices : normale = (0,0,0)zweite dumme schleife:
für jedes poly: normale ausrechnen und auf die 3 dazugehörigen vertices.normal draufaddieren
dritte dumme schleife:
für alle vertices: normal / normalenlänge.und es ist wirklich egal wie die polys verkettet sind, hauptsache es ist du weißt welche vertices zu welchem poly gehören.
und da du das während des rendern machen möchtest..... tu's nicht, es wird wohl ziemlich langsam.
aber falls du's trotzdem so machen möchtest
vielleicht liegt es ja darannormale=CalcNormal(m_vertexlist[(int)((ym_Height)+x)].v,
m_vertexlist[(int)((ym_Height)+(x+1))].v,
m_vertexlist[(int)((y*m_Height)+(x+1))].v);müßte wohl
normale=CalcNormal(m_vertexlist[(int)((y*m_Height)+x)].v,
m_vertexlist[(int)(((y+1)m_Height)+(x))].v,
m_vertexlist[(int)((ym_Height)+(x+1))].v);sein, sonst hast du 2mal den selben vector und dessen kreuzprodukt ist (0,0,0)
rapso->greets();
-
okay, danke!
ja ich werd die normalen wohl besser vorberechnen . . . danke!