Can some one point me to Java code ( in Java not C or C++) that calculates all the normals for all the vertices of a mesh for OpenGL ES application. I need this for lighting. Lets say I have a cube with following vertices and indices:

float vertices[] = { -width, -height, -depth, // 0
                      width, -height, -depth, // 1
                      width,  height, -depth, // 2
                     -width,  height, -depth, // 3
                     -width, -height,  depth, // 4
                      width, -height,  depth, // 5
                      width,  height,  depth, // 6
                     -width,  height,  depth  // 7
short indices[] = { 0, 2, 1,
                    0, 3, 2,

In above specific example how many normals we need?

  • \$\begingroup\$ You need one normal per triangle. Calculating normals is covered here: gamedev.stackexchange.com/questions/8191/… \$\endgroup\$ – bummzack Feb 16 '11 at 12:18
  • \$\begingroup\$ @bummzack Is there a way in OpenGL-ES to only specify one normal per triangle? I thought you could only pass them in as a vertex attribute to your Vertex Shader (and do per vertex lighting). Right? \$\endgroup\$ – Chris Smith Feb 16 '11 at 15:28
  • \$\begingroup\$ Yeah, you'll have to set the normal per vertex. For a cube, all vertices of one side share the same normal though. Therefore you can calculate the normal once per side and then pass that to all vertices belonging to that side. \$\endgroup\$ – bummzack Feb 16 '11 at 16:44

You can calculate normals by taking two edges, and cross product for each vertex. A cube actually has 24 vertices not 8, the reason is that each corner vertex is shared with different faces, because openGL takes per vertex attributes, you need to duplicate a vertex if you find that it has 2 different normals, assuming you want hard edges.


this is a C++ code but its self explanatory.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy