//--------------------------------------------------------------------- TangentSpaceCalc::Result TangentSpaceCalc::build( VertexElementSemantic targetSemantic, unsigned short sourceTexCoordSet, unsigned short index) { Result res; // Pull out all the vertex components we'll need populateVertexArray(sourceTexCoordSet); // Now process the faces and calculate / add their contributions processFaces(res); // Now normalise & orthogonalise normaliseVertices(); // Create new final geometry // First extend existing buffers to cope with new vertices extendBuffers(res.vertexSplits); // Alter indexes remapIndexes(res); // Create / identify target & write tangents insertTangents(res, targetSemantic, sourceTexCoordSet, index); return res; }
//--------------------------------------------------------------------- TangentSpaceCalc::Result TangentSpaceCalc::build( VertexElementSemantic targetSemantic, unsigned short sourceTexCoordSet, unsigned short index) { if (index == 0 && targetSemantic == VES_TEXTURE_COORDINATES) { OGRE_EXCEPT(Exception::ERR_INVALIDPARAMS, "Destination texture coordinate set must be greater than 0", "TangentSpaceCalc::build"); } Result res; // Pull out all the vertex components we'll need populateVertexArray(sourceTexCoordSet); // Now process the faces and calculate / add their contributions processFaces(res); // Now normalise & orthogonalise normaliseVertices(); // Create new final geometry // First extend existing buffers to cope with new vertices extendBuffers(res.vertexSplits); // Alter indexes remapIndexes(res); // Create / identify target & write tangents insertTangents(res, targetSemantic, sourceTexCoordSet, index); return res; }