0

我有一些使用 System.Drawing.SolidBrush 绘制半透明三角形的 GDI 代码。我正在尝试使用适当的 3D 渲染 API (OpenGL/Direct3D11) 重新实现代码,但我不确定这些三角形使用什么混合方程来获得与原始 GDI 代码相同的输出。

我认为它是相对简单的东西,比如加法混合(func=GL_FUNC_ADD,eq=GL_ONE,GL_ONE)或插值(func=GL_FUNC_ADD,eq=GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA),但看起来都不太正确。这几乎可以肯定是我的新代码中的一个错误,但我想确保在继续之前我正在朝着正确的目标努力。有人知道合适的混合方程式吗?

编辑:这是相关的 C# 代码,没有上下文:

using System.Drawing;
SolidBrush b = new SolidBrush(Color.FromArgb(alpha,red,green,blue));
Point[] points = ...;
Graphics g;
g.FillPolygon(b,points);

我的问题是,根据画笔的 RGBA 和目标像素的 RGBA,实际会写入什么颜色?我能找到的所有文档都只是说“使用 alpha 来控制画笔的透明度”或同样模糊的东西;我很好奇实际的混合方程是什么。

4

1 回答 1

0

根据MSDNSystem.Drawing.Graphics有一个名为的属性CompositingMode,可以是SourceOverSourceCopy

默认的是SourceOver,

指定在渲染颜色时,将其与背景颜色混合。混合由正在渲染的颜色的 alpha 分量决定。

正如我测试过的,这里使用的混合策略是alpha composition ,它通过以下等式确定区域图像 A 与图像 B中的像素值:

阿尔法成分方程

这里 α a和 α b是图像 A 和图像 B 的归一化 alpha 值;C a和 C b是图像 A 和图像 B 的 RGBA 值;C o是输出图像的 RGBA 值。

于 2015-12-07T10:45:41.987 回答