次の方法で共有


ポイント反射光の効果

点反射照明効果を使用して、反射サーフェスのように見えるイメージを作成します。 この効果では、イメージのアルファ チャネルを高さマップおよび配置する点光源として使用し、フォン照明モデルの反射部分に従って反射と光を計算します。

出力ビットマップの色は、明るい色、光の位置、およびサーフェス ジオメトリの結果です。 反射照明のある各ピクセルのアルファ チャネル出力は、そのピクセルの赤、緑、青のチャネル出力の最大値です。

この効果の CLSID はCLSID_D2D1PointSpecular。

画像の例

次の例は、点反射照明効果の入力イメージと出力イメージを示しています。

ポイント反射照明効果の入力イメージと出力イメージを示す効果の例のスクリーンショット。

反射ライトとは、フォン 照明モデルに従って特定の方向に反射される光を指します。

ビットマップの反射照明出力をカクル化するために使用されるベクトルの図。

効果は、次の数式を使用して最終的な出力ピクセル値を計算します。

最終的なピクセル値を計算するための数式。

where

K。 = 反射照明定数。
面法線単位ベクトル記号。= x と y の関数であるサーフェス法線単位ベクトル。 計算については、「 高さマップと法線ベクトル 」を参照してください。
中間単位ベクトル記号。= 目の単位ベクトルと光単位ベクトルの間の "中間" 単位ベクトル。 計算については、「 ポイント 光源 」を参照してください。
L r, Lg, Lb = RGB 成分の明るい色。

反射照明の定数を SpecularConstant プロパティとして設定し、明るい色を Color プロパティとして設定します。

ポイント 光源

ポイント光源は、ここでの画像のようにすべての方向に光を放射します。

すべての方向に光を出す点光。

LightPosition プロパティを使用して光源の位置を設定します。 この効果は、次の式を使用して、ポイント 光源の光ベクトル L を計算します。

光ベクトル式。

ここで、Light?、Lighty、Lightz は入力ライトの位置です。 効果は、フォン照明モデルで定義されているように、中間 ベクトルの中途半端なベクトル記号 を計算します。ここでの式を使用します。 照明モデルでは、視線ベクトル 記号である視線ベクトルが (0,0,1) にあると仮定します。

半角ベクトル方程式。

L と H の両方が単位長ベクトルに正規化されます。

高さマップと法線ベクトル

この効果により、アルファ チャネルに基づいて入力イメージの高さマップが生成されます。

高さ (Z) コンポーネントは、次の式を使用して計算されます。

サーフェスの高さ (z) を計算するための数式。

この効果は、Sobel グラデーションを使用して、入力ビットマップの サーフェス法線 (法線ベクトル 記号)を計算します。

反射照明定数と指数

反射光は、画像の高さマップの 表面から反射される光を表します。 ビットマップからの反射の量を決定する SpecularExponent プロパティを指定します。

指数が大きいほど、より輝くオブジェクトを表し、よりフォーカスのある図形に光を反射します。

SpecularConstant プロパティ K?は、反射光の量を、受光光の比率として定義します。

効果のプロパティ

表示名とインデックス列挙 説明
LightPosition
D2D1_POINTSPECULAR_PROP_LIGHT_POSITION
点光源の光源の光源の位置。 プロパティは、(x、y、z) として定義されたD2D1_VECTOR_3Fです。 単位はデバイスに依存しないピクセル (DIP) で、値は単位なしで無制限です。 型がD2D1_VECTOR_3F。
既定値は {0.0f、0.0f、0.0f} です。
SpecularExponent
D2D1_POINTSPECULAR_PROP_SPECULAR_EXPONENT
フォン照明式の反射項の指数。 値が大きいほど、より反射性の高いサーフェスに対応します。 この値は単位なしであり、1.0 から 128 の間である必要があります。 型は FLOAT です。
既定値は 1.0f です。
SpecularConstant
D2D1_POINTSPECULAR_PROP_SPECULAR_CONSTANT
受光光に対する反射反射の比率。 値は単位なしであり、0 ~ 10,000 の間である必要があります。 型は FLOAT です。
既定値は 1.0f です。
SurfaceScale
D2D1_POINTSPECULAR_PROP_SURFACE_SCALE
高さマップを生成するための Z 方向のスケール 係数。 値は単位なしであり、0 ~ 10,000 の間である必要があります。 型は FLOAT です。
既定値は 1.0f です。
Color
D2D1_POINTSPECULAR_PROP_COLOR
入力ライトの色。 このプロパティは、D2D1_VECTOR_3F (R、G、B) として公開され、LR、LG、LB の計算に使用されます。 型がD2D1_VECTOR_3F。
既定値は {1.0f、1.0f、1.0f} です。
KernelUnitLength
D2D1_POINTSPECULAR_PROP_KERNEL_UNIT_LENGTH
X 方向と Y 方向にサーフェス法線を生成するために使用される Sobel カーネル内の要素のサイズ。 このプロパティは、Sobel グラデーションの dx 値と dy 値にマップされます。 このプロパティは、D2D1_VECTOR_2F (カーネル ユニット長 X、カーネル ユニット長 Y) であり、 (DIP/カーネル ユニット) で定義されています。 この効果では、二次補間を使用して、カーネル要素のサイズに合わせてビットマップをスケーリングします。 型がD2D1_VECTOR_2F。
既定値は {1.0f、1.0f} です。
Scalemode
D2D1_POINTSPECULAR_PROP_SCALE_MODE
効果が使用する補間モードを使用して、イメージを対応するカーネル ユニットの長さにスケーリングします。 品質と速度の範囲の 6 つのスケール モードがあります。 詳細については、「 スケール モード 」を参照してください。
型がD2D1_POINTSPECULAR_SCALE_MODE。
既定値は D2D1_POINTSPECULAR_SCALE_MODE_LINEAR です。

スケール モード

列挙 説明
D2D1_POINTSPECULAR_SCALE_MODE_NEAREST_NEIGHBOR 最も近い単一点をサンプリングし、その点を使用します。 このモードでは処理時間は短くなりますが、最も低品質の画像が出力されます。
D2D1_POINTSPECULAR_SCALE_MODE_LINEAR 4 点サンプルと線形補間を使用します。 このモードでは、最も近いネイバーよりも高品質のイメージが出力されます。
D2D1_POINTSPECULAR_SCALE_MODE_CUBIC 補間に 16 個のサンプル 3 次カーネルを使用します。 このモードでは最も処理時間が長くなりますが、より高品質の画像が出力されます。
D2D1_POINTSPECULAR_SCALE_MODE_MULTI_SAMPLE_LINEAR 1 ピクセル内で 4 つの線形サンプルを使用して、良好なエッジアンチエイリアシングを行います。 このモードは、ピクセル数の少ない画像で少量スケールダウンする場合に適しています。
D2D1_POINTSPECULAR_SCALE_MODE_ANISOTROPIC 異方性フィルタリングを使用して、ビットマップの変換された形状に従ってパターンをサンプリングします。
D2D1_POINTSPECULAR_SCALE_MODE_HIGH_QUALITY_CUBIC 変換マトリックスにダウンスケーリングが関係している場合は、可変サイズの高品質の立方カーネルを使用して、イメージの事前スケールを実行します。 次に、最終的な出力に 3 次補間モードを使用します。

注意

モードを選択しない場合、効果は既定でD2D1_POINTSPECULAR_SCALE_MODE_LINEARされます。

必要条件

要件
サポートされている最小のクライアント Windows 7 のWindows 8とプラットフォーム更新プログラム [デスクトップ アプリ |Windows ストア アプリ]
サポートされている最小のサーバー Windows 7 のWindows 8とプラットフォーム更新プログラム [デスクトップ アプリ |Windows ストア アプリ]
ヘッダー d2d1effects.h
ライブラリ d2d1.lib、dxguid.lib

ID2D1Effect