protected void Initialize()
{
Vector3 ax = Vector3.Zero, ay = Vector3.Zero, az = Vector3.Zero;
int x = 0;
Quaternion q = Quaternion.Identity;
things.Clear();
orbits.Clear();
for ( x = 0; x < count; x++ )
{
ax = new Vector3( GenerateRandomFloat(), GenerateRandomFloat(), GenerateRandomFloat() );
ay = new Vector3( GenerateRandomFloat(), GenerateRandomFloat(), GenerateRandomFloat() );
az = ax.Cross( ay );
ay = az.Cross( ax );
ax.Normalize();
ay.Normalize();
az.Normalize();
q = Quaternion.FromAxes( ax, ay, az );
things.Add( q );
ax = new Vector3( GenerateRandomFloat(), GenerateRandomFloat(), GenerateRandomFloat() );
ay = new Vector3( GenerateRandomFloat(), GenerateRandomFloat(), GenerateRandomFloat() );
az = ax.Cross( ay );
ay = az.Cross( ax );
ax.Normalize();
ay.Normalize();
az.Normalize();
q = Quaternion.FromAxes( ax, ay, az );
orbits.Add( q );
}
int nVertices = count * 4;
IndexData indexData = new IndexData();
VertexData vertexData = new VertexData();
//Quads
short[] faces = new short[ count * 6 ];
for ( x = 0; x < count; x++ )
{
faces[ x * 6 + 0 ] = (short)( x * 4 + 0 );
faces[ x * 6 + 1 ] = (short)( x * 4 + 1 );
faces[ x * 6 + 2 ] = (short)( x * 4 + 2 );
faces[ x * 6 + 3 ] = (short)( x * 4 + 0 );
faces[ x * 6 + 4 ] = (short)( x * 4 + 2 );
faces[ x * 6 + 5 ] = (short)( x * 4 + 3 );
}
vertexData.vertexStart = 0;
vertexData.vertexCount = nVertices;
VertexDeclaration decl = vertexData.vertexDeclaration;
VertexBufferBinding bind = vertexData.vertexBufferBinding;
int offset = 0;
offset += decl.AddElement( 0, offset, VertexElementType.Float3, VertexElementSemantic.Position ).Size;
vertexBuffer = HardwareBufferManager.Instance.CreateVertexBuffer( decl.Clone(0), nVertices, BufferUsage.DynamicWriteOnly );
bind.SetBinding( 0, vertexBuffer );
HardwareIndexBuffer indexBuffer = HardwareBufferManager.Instance.CreateIndexBuffer( IndexType.Size16, count * 6, BufferUsage.StaticWriteOnly );
indexData.indexBuffer = indexBuffer;
indexData.indexStart = 0;
indexData.indexCount = count * 6;
indexBuffer.WriteData( 0, indexBuffer.Size, faces, true );
faces = null;
renderOperation.operationType = OperationType.TriangleList;
renderOperation.indexData = indexData;
renderOperation.vertexData = vertexData;
renderOperation.useIndices = true;
}