Axiom.Samples.VolumeTexture.ThingRendable.Initialize C# (CSharp) Метод

Initialize() защищенный Метод

protected Initialize ( ) : void
Результат void
		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;
		}