after looking at the simplebump_v2 i found some differences from my implementation, so i modifyed it to whats seen below..... but it is still black...
simplebump_v2:
Code: // ============================================================================= // TGLForm.RenderPath_ARBShader // ============================================================================= // Render path for ARB_Vertex_Program and ARB_Vertex_Shader. Needs PS2.0 // support, but is most likely faster then the glSlang render path. // ============================================================================= procedure TGLForm.RenderPath_ARBShader; begin glBindProgramARB(GL_VERTEX_PROGRAM_ARB, BumpVPARB); glEnable(GL_VERTEX_PROGRAM_ARB); glProgramLocalParameter4fARB(GL_VERTEX_PROGRAM_ARB, 0, LightPos.x,LightPos.y,LightPos.z,0); glProgramLocalParameter4fARB(GL_VERTEX_PROGRAM_ARB, 1, 0,10,10,0); glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, BumpFPARB); glEnable(GL_FRAGMENT_PROGRAM_ARB); glProgramLocalParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, 0, 1/50,1/50,1/50,1/50); // invRadius glProgramLocalParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, 1, 0,0,0,0); // ambient // Bind base map to texture unit 0 glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, DecalTex); glEnable(GL_TEXTURE_2D); // Bind normal map to texture unit 1 glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, NormalMap); glEnable(GL_TEXTURE_2D); // Bind specular map to texture unit 2 glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, SpecularMap); glEnable(GL_TEXTURE_2D); glClientActiveTexture(GL_TEXTURE0); glActiveTexture(GL_TEXTURE0); Primitive[PrimType].Render; // Disable textures glActiveTextureARB(GL_TEXTURE0_ARB); glDisable(GL_TEXTURE_2D); glActiveTextureARB(GL_TEXTURE1_ARB); glDisable(GL_TEXTURE_2D); glActiveTextureARB(GL_TEXTURE2_ARB); glDisable(GL_TEXTURE_2D); glDisable(GL_VERTEX_PROGRAM_ARB); glDisable(GL_FRAGMENT_PROGRAM_ARB); end;
Shader Editor:
Code: glBindProgramARB(GL_VERTEX_PROGRAM_ARB, BumpVP); glEnable(GL_VERTEX_PROGRAM_ARB); glProgramLocalParameter4fARB(GL_VERTEX_PROGRAM_ARB, 0, LightPos.X,LightPos.Y,LightPos.Z,0); glProgramLocalParameter4fARB(GL_VERTEX_PROGRAM_ARB, 1, 0,0,0,0); glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, BumpFP); glEnable(GL_FRAGMENT_PROGRAM_ARB); glProgramLocalParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, 0, 1/50,1/50,1/50,1/50); // invRadius glProgramLocalParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, 1, 0,0,0,0); // ambient // Bind base map to texture unit 0 glActiveTexture(GL_TEXTURE0); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, Shader.DiffuseMapID); // Bind normal map to texture unit 1 glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, Shader.BumpMapID); glEnable(GL_TEXTURE_2D); // Bind specular map to texture unit 2 glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, Shader.SpecularMapID); glEnable(GL_TEXTURE_2D); {Render Code Below} // Disable textures glActiveTexture(GL_TEXTURE1); glDisable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE2); glDisable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE0); //glDisable(GL_TEXTURE_2D); glDisable(GL_VERTEX_PROGRAM_ARB); glDisable(GL_FRAGMENT_PROGRAM_ARB);
simplebump_v2 Render code:
Code: // Set vertex array glVertexPointer(3, GL_FLOAT, 0, Vertex); glEnableClientState(GL_VERTEX_ARRAY); // Set normal array glNormalPointer(GL_FLOAT, SizeOf(TglVertexTBN), @Tangent[0].Normal); glEnableClientState(GL_NORMAL_ARRAY); // Set texture coords array glTexCoordPointer(2, GL_FLOAT, sizeof(TglVertexTBN), @Tangent[0].s); glEnableClientState(GL_TEXTURE_COORD_ARRAY); // Send sTangent on tex coord 1 glClientActiveTexture(GL_TEXTURE1); glTexCoordPointer(3, GL_FLOAT, sizeof(TglVertexTBN), @Tangent[0].sTangent); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glClientActiveTexture(GL_TEXTURE0); // Send tTangent on tex coord 2 glClientActiveTexture(GL_TEXTURE2); glTexCoordPointer(3, GL_FLOAT, sizeof(TglVertexTBN), @Tangent[0].tTangent); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glClientActiveTexture(GL_TEXTURE0); // Send Normaö on tex coord 3 glClientActiveTexture(GL_TEXTURE3); glTexCoordPointer(3, GL_FLOAT, sizeof(TglVertexTBN), @Tangent[0].Normal); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glClientActiveTexture(GL_TEXTURE0); // Render case primType of TglTorus : glDrawElements(GL_TRIANGLES, Length(Index), GL_UNSIGNED_INT, Index); TglPlane : glDrawElements(GL_QUADS, Length(Index), GL_UNSIGNED_INT, Index); end;
Shader Editor Render code:
Code: glDisable(GL_CULL_FACE); glBegin(GL_TRIANGLES); For i := 0 to 5 do begin glClientActiveTexture(GL_TEXTURE0); glActiveTexture(GL_TEXTURE0); glNormal3f(V[i].Normal.X,V[i].Normal.Y,V[i].Normal.Z); glTexCoord2f(V[i].TextureCoord.X,V[i].TextureCoord.Y); glClientActiveTexture(GL_TEXTURE1); glTexCoord3f(Tan[i].sT.X,Tan[i].sT.Y,Tan[i].sT.Z); glClientActiveTexture(GL_TEXTURE0); // Send tTangent on tex coord 2 glClientActiveTexture(GL_TEXTURE2); glTexCoord3f(Tan[i].tT.X,Tan[i].tT.Y,Tan[i].tT.Z); glClientActiveTexture(GL_TEXTURE0); // Send Normaö on tex coord 3 glClientActiveTexture(GL_TEXTURE3); glTexCoord3f(V[i].Normal.X,V[i].Normal.Y,V[i].Normal.Z); glVertex3f(V[i].Position.X,V[i].Position.Y,V[i].Position.Z); end; glend;
It doesn't need to be done with the Arrays does it? (Vertex array, etc)
|