Take the 2-minute tour ×
Game Development Stack Exchange is a question and answer site for professional and independent game developers. It's 100% free, no registration required.

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,
                    1,2,6,
                    6,5,1,
                    4,5,6,
                    6,7,4,
                    2,3,6,
                    6,3,7,
                    0,7,3,
                    0,4,7,
                    0,1,5,
                    0,5,4
                  };

In above specific example how many normals we need?

share|improve this question
    
You need one normal per triangle. Calculating normals is covered here: gamedev.stackexchange.com/questions/8191/… –  bummzack Feb 16 '11 at 12:18
    
@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? –  Chris Smith Feb 16 '11 at 15:28
    
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. –  bummzack Feb 16 '11 at 16:44

1 Answer 1

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.

http://www.devmaster.net/forums/showthread.php?t=1783

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

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.