Hello, im trying to render some simple map using the VBO and Shader.
Im trying to fix this annoying stoff for an few days now, but i cant seem to fix it.
Does anyone have suggestions?
VBO Code:
public void Draw(){
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, pointbufferid);
bindBufferData();
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, indexbufferid);
if(update){ glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, indexbuferdata, type); }
glVertexPointer(3, GL_FLOAT, stride, 0); // float at index 0
glNormalPointer(GL_FLOAT, stride, 12);
glTexCoordPointer(2, GL_FLOAT, stride, 24); // float at index 6
//glEnableVertexAttribArray(attrib);
//glVertexAttribPointer(attrib, 4, GL_UNSIGNED_BYTE, false, stride, 32);
glDrawElements(GL_TRIANGLES, indexsize, GL_UNSIGNED_INT, 0);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
//glDisableVertexAttribArray(attrib);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
update = false;
}
Calculating normals for Vertex points:
private void calcNormals(){
normal = new Vector3f(1,1,1);
for(TriangleIndice f : faces){
Vector3f.add(normal, f.getNormal(), normal);
}
normal.normalise();
//System.out.println(normal.x + " x " + normal.y + " x " + normal.z);
}
Shader (just simple lightning):
varying vec3 normal, lightDir, eyeVec;
varying vec3 pos;
uniform vec3 lightpos;
vec4 color, c;
void main()
{
vec3 N = normalize(normal);
vec3 L = normalize(lightDir);
float lambertTerm = dot(N,L);
float val = clamp(lambertTerm, 0, 1);
c = vec4(val, val, val, 1);
gl_FragColor = vec4(c.xyz, 1.0);
}
Result:
As visible, the normals are kinda messed up at some places.