directx转换的彩色字段alpha值

本文关键字:alpha 字段 彩色 转换 directx | 更新日期: 2023-09-27 18:25:18

我正在使用C#。我需要使用DirectX绘制点,它们应该是半透明的。我声明了要转换的顶点Colored,并将颜色值设置为:

 vertices[i].Color = Color.FromArgb(20,0,0,255).ToArgb();

这应该是非常透明的蓝色,但我得到的是不透明的蓝色。无论alpha值使用什么值,它总是完全不透明。有什么想法吗?我希望转换后的彩色字段支持alpha值。

提前谢谢。

图纸代码为:

device.Clear(ClearFlags.Target, System.Drawing.Color.White, 1.0f, 0);
device.RenderState.AlphaBlendEnable = true;
device.RenderState.AlphaSourceBlend = Blend.SourceAlpha;
device.RenderState.AlphaDestinationBlend = Blend.InvSourceAlpha;
device.RenderState.BlendOperation = BlendOperation.Add;
CustomVertex.TransformedColored[] vertices = new CustomVertex.TransformedColored[N];
for (int i = 0; i < N; i++)
{
   vertices[i].Position = new Vector4(2.5f + (g_embed[i, 0] - minx) * (width - 5.0f) / maxx, 2.5f + (g_embed[i, 1] - miny) * (height - 5.0f) / maxy, 0f, 1f);//g_embed, minx, width,maxx, miny,height, maxy are all predifined
   vertices[i].Color = Color.FromArgb(20, 0, 0, 255).ToArgb();
}
 device.BeginScene();
 device.VertexFormat = CustomVertex.TransformedColored.Format;
 device.DrawUserPrimitives(PrimitiveType.PointList, N, vertices);
 device.EndScene();
 device.Present();
 this.Invalidate();

directx转换的彩色字段alpha值

渲染状态用于预乘alpha。使用真实的alpha通道需要以下设置(Blendenumerationdoc):

graphics.GraphicsDevice.RenderState.AlphaBlendEnable = true;
graphics.GraphicsDevice.RenderState.SourceBlend = Blend.SourceAlpha;
graphics.GraphicsDevice.RenderState.DestinationBlend = Blend.InverseSourceAlpha;
graphics.GraphicsDevice.RenderState.BlendFunction = BlendFunction.Add;

它创建以下公式,其中a是颜色的alpha:a*SourceColor+(1-a)*DestColor