黑乎乎的你连根狗毛也看不见的

时间:2022-02-10 08:45:02

UI Composition 除了能够为 UI 元素成立三维空间外,还有相当重要的一个部件——灯光。宇宙万物的出色缤纷,皆源于光明,光,使我们看到各类对象,除了黑洞之外的世界都是五彩斑谰的。故而,真要模拟现实物体,合理的灯光照射是很关键,不然就“不像”了。

Composition API 为各类灯光效果提炼了一个大众基类——CompositionLight,它带有两个规范性的属性:

Targets:可视化元素的调集。用来确定场景中哪些对象应该被照亮。好比,你模拟了一面墙,墙壁上挂着各类画,有山水,有鸟兽,有美女,有蝙蝠,如果你要看画,黑乎乎的你连根狗毛也看不见的,所以你看到很多美术馆或博物馆城市安置各类灯源,只有打灯你才华看到这些画的。如果你但愿看美女,那么就把美女插手 Targets 调集,这样美女就会被灯光照亮。

ExclusionsFromTargets:这是一个排除项列表。与上面的恰好反过来,就是指定你不但愿被照亮的物体。如果你感受蝙蝠太狰狞太恐怖,不想看,你可以把它排除去,就不会被灯光照亮了。

环境光

环境光类似于咱们家里的白炽光、节能灯等,这种光源对照均匀,根基可以把整个房间照亮。

我们看一个环境光的例子。下面示例,在界面上加载一张图片,然后我们用环境光去照亮它。趁便放一个 Slider 控件,目的是可以调治光照的强度。

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition Height="auto"/> </Grid.RowDefinitions> <Image Source="Assets/5.jpg" Stretch="Uniform" Name="img"/> <Slider Grid.Row="1" Margin="2,9" StepFrequency="0.1" Value="1" Minimum="0" Maximum="10" ValueChanged="OnSliderValChanged"/> </Grid>

切换到代码文件,在页面类的结构函数中,咱们添加一下灯光效果。

AmbientLight light = null; public MainPage() { this.InitializeComponent(); Visual v = ElementCompositionPreview.GetElementVisual(img); Compositor compos = v.Compositor; light = compos.CreateAmbientLight(); light.Targets.Add(v); }

注意,我为什么要把 AmbientLight 的变量声明到类级别呢,因为可以在后面调解它的强度。下面是 Slider 控件的 ValueChanged 事件的措置惩罚惩罚代码。

private void OnSliderValChanged(object sender, RangeBaseValueChangedEventArgs e) { if(light != null) { light.Intensity = (float)e.NewValue; } }

这里要先判断一下 light 变量是否为 null,因为这个事件措置惩罚惩罚是在 XAML 代码中关联的,即在页面类实例结构过程中会挪用这个要领(主要是设置 Value 属性的值时产生),阿谁时候,环境光东西还没有创建,如果不判断,就会呈现 null 引用异常。

AmbientLight 类暗示环境光,它有一个 Color 属性,用以指定光的颜色,默认是白光。当物体被白光照亮时,它泛起的是实质(原来面目)。所以,上面代码的执行效果如下图。

黑乎乎的你连根狗毛也看不见的

Intensity 暗示光照强度,从上面的例子咱们看到,这个值应该大于 0,小于即是 0 就全黑了,什么都看不见,那就没有意义了,值也不要太大,所以我这个例子最大就到 10 ,固然你可以设置 100、1000,可是强度太大了,会亮瞎眼的,什么也看不见,也是没有意义的。光照强度默认是 1 ,我们可以按照需要设置合适的值。

我们还可以换一下其他颜色的光,好比,我们改一下代码,用充塞幽灵意味的绿光去照射一下。

light.Color = Colors.Green;

然后,效果很惊人。

黑乎乎的你连根狗毛也看不见的

定点光