
3. A Pipeline for Authored Structural Damage 313
extern float damageBitArray[16]; // Set to maximum size needed .
VS_OUTPUT VS_Main ( VS_INPUT In)
{
.
.
.
// Check whether this vertex belongs to a " damaged " area .
// Damage ID is compressed with vertex normal .
float damageID = round (length (In. normal ))-1;
if ( damageID > 0)
{
// Assume a single- precision floating -point number
// can represent an integer number of about 24 bits.
float bitArrayIndex;
damageID = modf (( damageID -1)/24 , bitArrayIndex) * 24;
float damageBitField = damageBitArray[bitArrayIndex];
float damaged = checkBit ( damageBitField , damageID );
In. position *= 1.0f- damaged ; // Collapse ...