# Why isn't the bitangent calculated?

In teh tangent space vertex attributes why is the bitangent (aka binormal) provided as an attribute instead of calculated?

If the three vectors of the tangent space must be perpendicular then the bitangent can be calculated as the cross-product of the other two vectors. There are technically two perpendiculars here, but surely we could consistently calculate the one we want, even if it requires a boolean marker to negate it.

Similarly the bitangent itself doesn't need a full vector to be represented. From the normal alone we know the plane on which the tangent must reside. In theory a simple angle would be enough to calculate the tangent vector.

Given that GPU memory is at a premium why do we provide the full vectors for these values rather than calculating them (with reduced data input)? Or am I wrong in assuming the tangent space must be a cartesian system?

• Actually I have seen both implementations, calculated and passed as attribute. Why did you assume that it is not calculated ? – concept3d Apr 16 '14 at 8:14
• All the references I've looked at show it's calculated as part of the mesh. The libraries I've used (only a few) also expect it as a precalculated vertex attribute. Additionally it is exported by modelling programs. – edA-qa mort-ora-y Apr 16 '14 at 8:39
• well, it depends on the implementation, this one doesn't pass it as attribute terathon.com/code/tangent.html – concept3d Apr 16 '14 at 8:42
• That article does state that it isn't necessarily true that all vectors are orthogonal. – edA-qa mort-ora-y Apr 16 '14 at 9:02