// Tangent calculation void RenderablePicoSurface::calculateTangents() { // Calculate the tangents and bitangents using the indices into the vertex // array. for (Indices::iterator i = _indices.begin(); i != _indices.end(); i += 3) { ArbitraryMeshVertex& a = _vertices[*i]; ArbitraryMeshVertex& b = _vertices[*(i + 1)]; ArbitraryMeshVertex& c = _vertices[*(i + 2)]; // Call the tangent calculation function ArbitraryMeshTriangle_sumTangents(a, b, c); } // Normalise all of the tangent and bitangent vectors for (VertexVector::iterator j = _vertices.begin(); j != _vertices.end(); ++j) { j->tangent.normalise(); j->bitangent.normalise(); } }
// Update geometry void MD5Surface::updateGeometry() { _aabb_local = AABB(); for (Vertices::const_iterator i = _vertices.begin(); i != _vertices.end(); ++i) { _aabb_local.includePoint(i->vertex); } for (Indices::iterator i = _indices.begin(); i != _indices.end(); i += 3) { ArbitraryMeshVertex& a = _vertices[*(i + 0)]; ArbitraryMeshVertex& b = _vertices[*(i + 1)]; ArbitraryMeshVertex& c = _vertices[*(i + 2)]; ArbitraryMeshTriangle_sumTangents(a, b, c); } for (Vertices::iterator i = _vertices.begin(); i != _vertices.end(); ++i) { i->tangent.normalise(); i->bitangent.normalise(); } // Build the display lists createDisplayLists(); }