private bool InitialiseTorus()
{
// Calculate the number of vertices and indices.
numVertices=(torusPrecision+1)*(torusPrecision+1);
numIndices=2*torusPrecision*torusPrecision*3;
// Create the vertices and indices.
vertices = new TorusVertex[numVertices];
indices = new uint[numIndices];
// Calculate the first ring - inner radius 4, outer radius 1.5
for (int i = 0; i < torusPrecision + 1; i++)
{
vertices[i].position = (new Vertex(1.5f, 0.0f, 0.0f)).GetRotatedZ(i * 360.0f / torusPrecision) + new Vertex(4.0f, 0.0f, 0.0f);
vertices[i].s = 0.0f;
vertices[i].t = (float)i / torusPrecision;
vertices[i].sTangent.Set(0.0f, 0.0f, -1.0f);
vertices[i].tTangent = (new Vertex(0.0f, -1.0f, 0.0f)).GetRotatedZ(i * 360.0f / torusPrecision);
vertices[i].normal = vertices[i].tTangent.VectorProduct(vertices[i].sTangent);
}
// Rotate the first ring to get the other rings
for(uint ring=1; ring<torusPrecision+1; ring++)
{
for (uint i = 0; i < torusPrecision + 1; i++)
{
vertices[ring * (torusPrecision + 1) + i].position =
vertices[i].position.GetRotatedY(ring * 360.0f / torusPrecision);
vertices[ring * (torusP