public override void NotifyCurrentCamera( Camera camera )
{
base.NotifyCurrentCamera( camera );
Vector3 zVec = ParentNode.DerivedPosition - camera.DerivedPosition;
float sqdist = zVec.LengthSquared;
zVec.Normalize();
Vector3 fixedAxis = camera.DerivedOrientation * Vector3.UnitY;
Vector3 xVec = fixedAxis.Cross( zVec );
xVec.Normalize();
Vector3 yVec = zVec.Cross( xVec );
yVec.Normalize();
Quaternion oriQuat = Quaternion.FromAxes( xVec, yVec, zVec );
if ( sqdist > mSize * mSize / 2 ) // ADD THIS CONDITION HERE
{
mFakeOrientation = oriQuat.ToRotationMatrix();
}
else
{
mFakeOrientation = camera.DerivedOrientation.ToRotationMatrix(); //cam->getDerivedOrientation().ToRotationMatrix(m_fakeOrientation);
}
Matrix3 tempMat = Matrix3.Zero;
Quaternion q = ParentNode.DerivedOrientation.UnitInverse * oriQuat;
tempMat = q.ToRotationMatrix();
Matrix4 rotMat = Matrix4.Identity;
rotMat = tempMat;
rotMat.Translation = new Vector3( 0.5f, 0.5f, 0.5f );
mUnit.TextureMatrix = rotMat;
material.GetTechnique( 0 ).GetPass( 0 ).GetTextureUnitState( 0 ).TextureMatrix = rotMat;
}