Why Can I only see Red Color when drawing three points which have three colors?

CustomVertex.TransformedColored[] verts = new CustomVertex.TransformedColored[3];

verts[0].X=150;verts[0].Y=50;verts[0].Z=0.5f;verts[0].Color=Color.Red.ToArgb();
verts[1].X=250;verts[1].Y=250;verts[1].Z=0.5f;verts[1].Color=Color.Yellow.ToArgb();
verts[2].X=50;verts[2].Y=250;verts[2].Z=0.5f; verts[2].Color =Color.Green.ToArgb();

device.SetRenderState(RenderStates.ShadeMode,2);

device.DrawPrimitives(PrimitiveType.TriangleList, 0, 1);

Someone Please tell me?

[504 byte] By [hackbabu] at [2007-12-23]
# 1

This code snippets looks fine. You need to provide a little bit more of your code as the problem seams to be elsewhere.

Have you modified any other states?

Have you set the right FVF?

RalfKornmann at 2007-8-30 > top of Msdn Tech,Game Technologies: DirectX, XNA, XACT, etc.,Game Technologies: DirectX 101...
# 2

This is my All code.

Device device = null;
VertexBuffer vertexBuffer = null;
public bool Initialize()
{
PresentParameters presentParams = new PresentParameters();
presentParams.Windowed=true;
presentParams.SwapEffect = SwapEffect.Discard;
device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);
this.OnCreateDevice(device, null);
return true;
}
public void OnCreateDevice(object sender, EventArgs e)
{
Device dev = (Device)sender;
vertexBuffer = new VertexBuffer(typeof(CustomVertex.TransformedColored), 3, dev, 0, CustomVertex.TransformedColored.Format, Pool.Default);
vertexBuffer.Created += new System.EventHandler(this.OnCreateVertexBuffer);
this.OnCreateVertexBuffer(vertexBuffer, null);
}

public void OnCreateVertexBuffer(object sender, EventArgs e)
{
Console.WriteLine("Call!!");
VertexBuffer vb = (VertexBuffer)sender;
GraphicsStream stm = vb.Lock(0, 0, 0);
CustomVertex.TransformedColored[] verts = new CustomVertex.TransformedColored[3];
verts[0].X=150;verts[0].Y=50;verts[0].Z=0.5f; verts[0].Color = System.Drawing.Color.Red.ToArgb();
verts[1].X=150;verts[1].Y=150;verts[1].Z=0.5f; verts[1].Color = System.Drawing.Color.Yellow.ToArgb();
verts[2].X=50;verts[2].Y=50;verts[2].Z=0.5f; verts[2].Color = System.Drawing.Color.Green.ToArgb();
stm.Write(verts);
vb.Unlock();
}
private void Render()
{
if (device == null) {return;}
device.Clear(ClearFlags.Target, System.Drawing.Color.Blue, 1.0f, 0);
device.BeginScene();
device.SetStreamSource( 0, vertexBuffer, 0);
device.VertexFormat = CustomVertex.TransformedColored.Format;
device.SetRenderState(RenderStates.ShadeMode,2);

device.DrawPrimitives(PrimitiveType.TriangleList, 0, 1);
device.EndScene();
device.Present();
}
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{this.Render(); }

And How to set FVF?Can You tell me?

hackbabu at 2007-8-30 > top of Msdn Tech,Game Technologies: DirectX, XNA, XACT, etc.,Game Technologies: DirectX 101...
# 3

FVF stands for Flexible Vertex Format.You have already set it right with device.VertexFormat.

Your code works fine on my system. Can you please tell me what graphics card you are use and make a screenshot of your Result?

RalfKornmann at 2007-8-30 > top of Msdn Tech,Game Technologies: DirectX, XNA, XACT, etc.,Game Technologies: DirectX 101...
# 4
Thanks ,I haved mail the screenshot of Result and graphics card to you.
hackbabu at 2007-8-30 > top of Msdn Tech,Game Technologies: DirectX, XNA, XACT, etc.,Game Technologies: DirectX 101...
# 5

I don’t receive an image but anyway it would be better if you upload it to any of the free image hoster and post a link here.

RalfKornmann at 2007-8-30 > top of Msdn Tech,Game Technologies: DirectX, XNA, XACT, etc.,Game Technologies: DirectX 101...
# 6

How do I upload the image?

I try to use insert link.But it is disabled.

hackbabu at 2007-8-30 > top of Msdn Tech,Game Technologies: DirectX, XNA, XACT, etc.,Game Technologies: DirectX 101...
# 7

You can upload them on a free image host like

http://www.imageshack.us

or

http://picsplace.to/

RalfKornmann at 2007-8-30 > top of Msdn Tech,Game Technologies: DirectX, XNA, XACT, etc.,Game Technologies: DirectX 101...
# 8

If Light is ON : (and one light is defined...not a spot light but a global Light)

ColorVertex=MaterialColor * (AmbientColor + Light1 +Ligth2...)

And You need to specify the ColorOp, ARG1 and ARG2

In your case you would need ColorOp to be SELECTARG1 and ARG1 to be Diffuse (ARG2 is not used)

Did you put the LIGHT on or off ?
If you have Light ON you need to define one Light...or an ambient value (a state value)

With Light OFF the Color come only from the Vertex Color Value (not the formula above)

http://www.toymaker.info/Games/html/render_states.html

Etienne2005 at 2007-8-30 > top of Msdn Tech,Game Technologies: DirectX, XNA, XACT, etc.,Game Technologies: DirectX 101...
# 9
thank very much!!
hackbabu at 2007-8-30 > top of Msdn Tech,Game Technologies: DirectX, XNA, XACT, etc.,Game Technologies: DirectX 101...