OpenGL: Dot3 Bumpmapping
-
Hi!
Habe dieses Tutorial http://delphigl.com/script/do_show.php?name=bumpmap&action=2 zum Thema Dot3 Bumpmapping gefunden. Problem ist, dass das noch NVIDIA Extensions sind. Ich denke mal, das dies längst ARB Extension oder gar fest implementiert ist.Wenn ja, gibt es irgendwo eine kurze Erklährung dazu? Habe nur immer Beispiele über VertexPrograms/Shader gefunden. Ich möchte jedoch ersteinmal auf diese verzichten.
Ist es unbedingt notwendig, über die Vertexfarbe den Lichtvektor zu übergeben für jeden Vertex einzeln? Oder fließt die Vertexfarbe bei aktiven GL_LIGHTING nicht mehr mit ein ins Rendering?
mfg olli
-
http://oss.sgi.com/projects/ogl-sample/registry/ARB/texture_env_dot3.txt
Ist schon lange durch die ARB gewandert und glaube seit OpenGL 1.4 fest integriert.
Du hast recht - die uebergebene Farbe ist der Vector.
Wenn du ohne Shader arbeitest, und somit den Tangentspace nicht im Vertexshader verarbeiten kannst, musst du per Vertex uebergeben.Hope this helps
[Edit] Das OpenGL Lighting kannst du wenn du PerPixel Beleuchtest nach /dev/null verschieben!
-
Vielen Dank! Mache es jetzt so:
Normalmap als Textureunit 0
glActiveTexture GL_TEXTURE0 glBindTexture GL_TEXTURE_2D, iNormalMap glTexEnvf GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT glTexEnvf GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_DOT3_RGB_EXT glTexEnvf GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_TEXTURE glTexEnvf GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, GL_SRC_COLOR glTexEnvf GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PRIMARY_COLOR_EXT glTexEnvf GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_COLOREigentliche Textur als Textureunit 1:
glActiveTexture GL_TEXTURE1 glBindTexture GL_TEXTURE_2D, iTexture glEnable GL_TEXTURE_2D glTexEnvf GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT glTexEnvf GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_MODULATE glTexEnvf GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_PREVIOUS_EXT glTexEnvf GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, GL_SRC_COLOR glTexEnvf GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_TEXTURE glTexEnvf GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_COLORDann berechne ich die Vertexfarbe so:
V = Lokale Vertexposition*Modelviewmatrix L = Absolute Lichtposition LN = V-L LN = Normalisieren(LN) VN = Vertexnormale*Modelviewmatrix(nur Rotation) S = Punktprodukt(VN, LN) Wenn S < 0.0 Dann S = 0.0 VertexRot = LN.X*S VertexGrün = LN.Y*S VertexBlau = LN.Z*SVllt. hilft das den ein oder anderen weiter

Was mich noch interessiert, ob man Specularmapping dadurch realisieren kann. Der berechnete Specularwert müsste doch dann zu der fertig berechneten Vertexfarbe hinzuaddiert werden ?oder
Specularmaps sind schwarzweiß, deswegen denke ich mal, das jeder Texel der Map einen Wert für glMaterialf GL_SHININESS, Wert gepräsentiert. Liege ich da richtig?
mfg olli