public Triangle( Vector3 v1, Vector3 v2, Vector3 v3, ColorEx c1, ColorEx c2, ColorEx c3 )
{
vertexData = new VertexData();
renderOperation.vertexData = vertexData;
renderOperation.vertexData.vertexCount = 3;
renderOperation.vertexData.vertexStart = 0;
renderOperation.indexData = null;
renderOperation.operationType = OperationType.TriangleList;
renderOperation.useIndices = false;
VertexDeclaration decl = vertexData.vertexDeclaration;
VertexBufferBinding binding = vertexData.vertexBufferBinding;
// add a position and color element to the declaration
decl.AddElement( POSITION, 0, VertexElementType.Float3, VertexElementSemantic.Position );
decl.AddElement( COLOR, 0, VertexElementType.Color, VertexElementSemantic.Diffuse );
// POSITIONS
// create a vertex buffer for the position
HardwareVertexBuffer buffer = HardwareBufferManager.Instance.CreateVertexBuffer( decl.Clone( POSITION ), vertexData.vertexCount, BufferUsage.StaticWriteOnly );
Vector3[] positions = new Vector3[] { v1, v2, v3 };
// write the positions to the buffer
buffer.WriteData( 0, buffer.Size, positions, true );
// bind the position buffer
binding.SetBinding( POSITION, buffer );
// COLORS
// create a color buffer
buffer = HardwareBufferManager.Instance.CreateVertexBuffer( decl.Clone( COLOR ), vertexData.vertexCount, BufferUsage.StaticWriteOnly );
// create an int array of the colors to use.
// note: these must be converted to the current API's
// preferred packed int format
int[] colors = new int[] {
Root.Instance.RenderSystem.ConvertColor(c1),
Root.Instance.RenderSystem.ConvertColor(c2),
Root.Instance.RenderSystem.ConvertColor(c3)
};
// write the colors to the color buffer
buffer.WriteData( 0, buffer.Size, colors, true );
// bind the color buffer
binding.SetBinding( COLOR, buffer );
// MATERIAL
// grab a copy of the BaseWhite material for our use
Material material = (Material)MaterialManager.Instance.GetByName( "BaseWhite" );
material = material.Clone( "TriMat" );
// disable lighting to vertex colors are used
material.Lighting = false;
// set culling to none so the triangle is drawn 2 sided
material.CullingMode = CullingMode.None;
materialName = "TriMat";
this.Material = material;
// set the bounding box of the tri
// TODO: not right, but good enough for now
this.box = new AxisAlignedBox( new Vector3( 25, 50, 0 ), new Vector3( -25, 0, 0 ) );
}