That’s right boys and girls, today I got Marv to animate. (Well, Monday).
Horaaah.
I am very proud of this because it was really hard to figure out, and some parts I still don’t fully understand, but I’m going to explain how I did it here and maybe someone one day will read it and think I’m amazing. Which they are right now. Yes I’m talking about you. The reader.
The first thing I had to get to work was, working off of yesterday’s progress, getting the indices and weights for the bones into the shader. This was done by adding a few more vertex attribute arrays to the shader and then sending them in where the shader is loaded:
InitFBXSceneResources()
// bind arrays needed for animation / normals / texturing etc glEnableVertexAttribArray(0); // pos glEnableVertexAttribArray(1); // normal glEnableVertexAttribArray(2); // tangent glEnableVertexAttribArray(3); // binormal glEnableVertexAttribArray(4); // indices for bones glEnableVertexAttribArray(5); // weights for bones glEnableVertexAttribArray(6); // uv glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, sizeof(FBXVertex), (char*)FBXVertex::PositionOffset); glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, sizeof(FBXVertex), (char*)FBXVertex::NormalOffset); glVertexAttribPointer(2, 4, GL_FLOAT, GL_FALSE, sizeof(FBXVertex), (char*)FBXVertex::TangentOffset); glVertexAttribPointer(3, 4, GL_FLOAT, GL_FALSE, sizeof(FBXVertex), (char*)FBXVertex::BiNormalOffset); glVertexAttribPointer(4, 2, GL_FLOAT, GL_FALSE, sizeof(FBXVertex), (char*)FBXVertex::IndicesOffset); glVertexAttribPointer(5, 2, GL_FLOAT, GL_FALSE, sizeof(FBXVertex), (char*)FBXVertex::WeightsOffset); glVertexAttribPointer(6, 2, GL_FLOAT, GL_FALSE, sizeof(FBXVertex), (char*)FBXVertex::UVOffset);
Init()
// load shader const char* aszInputs[] = { "Position", "Normal", "Tangent", "BiNormal", "Indices", "Weights", "UV", }; const char* aszOutputs[] = { "outColour" }; // load shader g_ShaderID = LoadShader( 7, aszInputs, 1, aszOutputs, "./shaders/animation_vertex.glsl", "./shaders/normalmap_pixel.glsl" );
Below is an image showing the structure of the FBX model and the animation part of it.