点光源镜面反射效果

使用点反射照明效果创建看似是反射表面的图像。 该效果使用图像的 alpha 通道作为高度贴图和你定位的点光源,并根据 Phong 照明模型的反射部分计算反射和光线。

输出位图的颜色是浅色、光线位置和图面几何图形的结果。 具有反射照明的每个像素的 alpha 通道输出是该像素的最大红色、绿色和蓝色通道输出。

此效果的 CLSID CLSID_D2D1PointSpecular。

示例图

此处的示例显示了点反射照明效果的输入和输出图像。

效果示例屏幕截图,显示点反射照明效果的输入和输出图像。

反射光是指根据 Phong 照明模型在特定方向反射的光。

用于聚集位图的反射照明输出的矢量图。

该效果使用以下公式计算最终输出像素值:

用于计算最终像素值的公式。

其中

K? = 反射照明常量。
图面法线单位矢量符号。 = 图面法线单位向量,它是 x 和 y 的函数。 有关计算,请参阅 高度映射和法线矢量
中间单位向量符号。 = 眼睛单位向量和光单位矢量之间的“中途”单位矢量。 有关计算,请参阅 点光源
Lr、Lg、Lb = 以 RGB 分量表示的浅色。

将反射照明常量设置为 SpecularConstant 属性,将光颜色设置为 Color 属性。

点光源

点光源发出所有方向的光,如此处的图像所示。

向所有方向发射光的点光。

使用 LightPosition 属性设置光源的位置。 该效果使用以下公式计算点光源的光向量 L:

光向量公式。

其中,Light?、Lighty 和 Lightz 是输入光线位置。 该效果使用此处的公式计算 Phong 照明模型中定义的 半向量、半向量符号 。 照明模型假定眼向量 (眼睛矢量符号)位于 (0,0,1) 。

半向量公式。

L 和 H 都规范化为单位长度向量。

高度映射和法线矢量

该效果基于其 alpha 通道为输入图像生成高度贴图。

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
Phong 照明等式中反射项的指数。 较大的值对应于反射性更高的表面。 此值是无单位的,必须介于 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
Sobel 内核中用于在 X 和 Y 方向生成表面法线的元素的大小。 此属性映射到 Sobel 渐变中的 dx 和 dy 值。 此属性是D2D1_VECTOR_2F (内核单元长度 X、内核单元长度 Y) ,在 (DIP/内核单元) 中定义。 该效果使用双线性内插来缩放位图以匹配内核元素的大小。 类型为D2D1_VECTOR_2F。
默认值为 {1.0f, 1.0f}。
ScaleMode
D2D1_POINTSPECULAR_PROP_SCALE_MODE
效果用于将图像缩放到相应的内核单元长度的内插模式。 有六种缩放模式在质量和速度方面都有范围。 有关详细信息 ,请参阅缩放模式
类型为D2D1_POINTSPECULAR_SCALE_MODE。
默认值为 D2D1_POINTSPECULAR_SCALE_MODE_LINEAR。

缩放模式

枚举 描述
D2D1_POINTSPECULAR_SCALE_MODE_NEAREST_NEIGHBOR 对最近的单个点进行采样并使用它。 此模式使用的处理时间较少,但输出质量最低的图像。
D2D1_POINTSPECULAR_SCALE_MODE_LINEAR 使用四点样本和线性内插。 此模式输出的质量高于最近邻居的图像。
D2D1_POINTSPECULAR_SCALE_MODE_CUBIC 使用 16 个示例立方内核进行内插。 此模式使用的处理时间最多,但会输出更高质量的图像。
D2D1_POINTSPECULAR_SCALE_MODE_MULTI_SAMPLE_LINEAR 在单个像素内使用 4 个线性样本,以便进行良好的边缘抗锯齿。 此模式适用于在像素较少的图像上按少量纵向缩减。
D2D1_POINTSPECULAR_SCALE_MODE_ANISOTROPIC 使用各向异性筛选根据位图的转换形状对图案进行采样。
D2D1_POINTSPECULAR_SCALE_MODE_HIGH_QUALITY_CUBIC 如果转换矩阵中涉及降级,则使用可变大小的高质量立方内核对图像执行预缩减。 然后将三次内插模式用于最终输出。

注意

如果未选择模式,则效果默认为D2D1_POINTSPECULAR_SCALE_MODE_LINEAR。

要求

要求
最低受支持的客户端 适用于 Windows 7 的Windows 8和平台更新 [桌面应用 |Windows 应用商店应用]
最低受支持的服务器 适用于 Windows 7 的Windows 8和平台更新 [桌面应用 |Windows 应用商店应用]
标头 d2d1effects.h
d2d1.lib、dxguid.lib

ID2D1Effect