namespace Yw.WpfUI.Hydro
|
{
|
/// <summary>
|
/// 材质辅助类
|
/// </summary>
|
internal static class MaterialHelper
|
{
|
/// <summary>
|
/// 创建标准材质(漫反射+高光)
|
/// </summary>
|
public static Material CreateMaterial
|
(
|
Color color,
|
double ambient = 0.1,
|
double specular = 0.5,
|
double specularPower = 100
|
)
|
{
|
var group = new MaterialGroup();
|
|
// 环境光
|
if (ambient > 0)
|
{
|
group.Children.Add(new EmissiveMaterial(
|
new SolidColorBrush(ScaleColor(color, ambient))));
|
}
|
|
// 漫反射
|
group.Children.Add(new DiffuseMaterial(
|
new SolidColorBrush(color)));
|
|
// 高光
|
if (specular > 0)
|
{
|
group.Children.Add(new SpecularMaterial(
|
new SolidColorBrush(Colors.White),
|
specularPower * specular));
|
}
|
|
return group;
|
}
|
|
/// <summary>
|
/// 创建纹理材质
|
/// </summary>
|
public static Material CreateMaterial
|
(
|
Brush brush,
|
double specularPower = 100,
|
double specularStrength = 0.2
|
)
|
{
|
var group = new MaterialGroup();
|
|
// 漫反射
|
group.Children.Add(new DiffuseMaterial(brush));
|
|
// 高光
|
if (specularStrength > 0)
|
{
|
group.Children.Add(new SpecularMaterial(
|
new SolidColorBrush(Colors.White),
|
specularPower * specularStrength));
|
}
|
|
return group;
|
}
|
|
/// <summary>
|
/// 创建纯色材质(性能最优)
|
/// </summary>
|
public static Material CreateSimpleMaterial(Color color)
|
{
|
return new DiffuseMaterial(new SolidColorBrush(color));
|
}
|
|
/// <summary>
|
/// 创建发光材质
|
/// </summary>
|
public static Material CreateEmissiveMaterial(Color color, double strength = 1.0)
|
{
|
return new EmissiveMaterial(new SolidColorBrush(
|
ScaleColor(color, strength)));
|
}
|
|
//缩放颜色
|
private static Color ScaleColor(Color color, double factor)
|
{
|
return Color.FromArgb(
|
color.A,
|
(byte)(color.R * factor),
|
(byte)(color.G * factor),
|
(byte)(color.B * factor));
|
}
|
|
|
}
|
}
|