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 に関して、実際にどの色が書き込まれるかということです。私が見つけることができるすべてのドキュメントは、「アルファを使用してブラシの透明度を制御する」または同様に漠然としたものと言っています。実際のブレンド方程式がどうなっているのか興味があります。

4

1 に答える 1

0

MSDNによると、 にはまたはのいずれかSystem.Drawing.Graphicsの名前のプロパティがあります。CompositingModeSourceOverSourceCopy

デフォルトはSourceOverで、これは

色をレンダリングするときに背景色とブレンドすることを指定します。ブレンドは、レンダリングされる色のアルファ コンポーネントによって決定されます。

私がテストしたように、ここで使用されるブレンド戦略はアルファ合成であり、次の式によって画像 B 上の領域画像 Aのピクセル値を決定します。

アルファ組成方程式

ここで、α aと α bは、画像 A と画像 B の正規化されたアルファ値です。C aと C bは、イメージ A とイメージ B の RGBA 値です。C oは、出力イメージの RGBA 値です。

于 2015-12-07T10:45:41.987 に答える