JeJoRic
JeJoRic

Reputation: 95

Opengl Es update normals for each vertex in an animation

Below code (original is here) doesn't update normals, how can I update normals too?

Assume that there is a normals attribute in userData and related changes are made for vertex shader. And also first NULL in the line 76 was changed to &userData->normals etc.

///
// Update MVP matrix based on time
//
void Update ( ESContext *esContext, float deltaTime )
{
   UserData *userData = (UserData*) esContext->userData;
   ESMatrix perspective;
   ESMatrix modelview;
   float    aspect;

   // Compute a rotation angle based on time to rotate the cube
   userData->angle += ( deltaTime * 40.0f );
   if( userData->angle >= 360.0f )
      userData->angle -= 360.0f;

   // Compute the window aspect ratio
   aspect = (GLfloat) esContext->width / (GLfloat) esContext->height;

   // Generate a perspective matrix with a 60 degree FOV
   esMatrixLoadIdentity( &perspective );
   esPerspective( &perspective, 60.0f, aspect, 1.0f, 20.0f );

   // Generate a model view matrix to rotate/translate the cube
   esMatrixLoadIdentity( &modelview );

   // Translate away from the viewer
   esTranslate( &modelview, 0.0, 0.0, -2.0 );

   // Rotate the cube
   esRotate( &modelview, userData->angle, 1.0, 0.0, 1.0 );

   // Compute the final MVP by multiplying the 
   // modevleiw and perspective matrices together
   esMatrixMultiply( &userData->mvpMatrix, &modelview, &perspective );
}

Upvotes: 1

Views: 131

Answers (1)

datenwolf
datenwolf

Reputation: 162327

The normal transformation matrix is the inversed transpose of the modelview matrix. So you have to calculate that and provide in an additional uniform to transform the normals with.

Upvotes: 2

Related Questions