[UWP]使用PointLight並實現動畫效果

来源:https://www.cnblogs.com/dino623/archive/2019/11/06/using-PointLight-and-create-animation.html
-Advertisement-
Play Games

1. Composition Lighting UWP中的Composition Light是一組可以創建3D光照的API,它明明十分好玩而且強大, 但博客園幾乎沒有相關文章(用 或`pointlight`做關鍵字只能找到我自己的文章),這篇文章就 來介紹Composition Lighting的入 ...


1. Composition Lighting

UWP中的Composition Light是一組可以創建3D光照的API,它明明十分好玩而且強大, 但博客園幾乎沒有相關文章(用UWPpointlight做關鍵字只能找到我自己的文章),這篇文章就 來介紹Composition Lighting的入門知識。

Composition Light有四種類型:

  • AmbientLight,發出出現的非定向光源的光源反射場景中的所有內容。
  • DistantLight,無限大遠處的光源的發光的一個方向。 如 sun。
  • PointLight,發出的所有方向光的光點源。 如燈泡。
  • SpotLight,發出的光線的內部和外部圓錐光源。 如手電筒筒。

這四種類型的它們Composition Light分別使用Compositor的CreateXXXXXLight()函數創建,例如:

var pointLight = compositor.CreatePointLight();

上圖分別是SpotLight和PointLight的效果(其它兩個截圖沒什麼好看的)。

2. 使用PointLight

使用PointLight最基礎的例子是WindowsCompositionSamples中的 TextShimmer 例子,下麵用這個例子的代碼介紹如何使用PointLight。

首先把需要應用PointLight的的TextBlock添加到UI,顏色為DimGray。

<TextBlock Name="TextBlock" FontSize="100" Foreground="DimGray" FontFamily="SegoeUI" FontWeight="Thin"
   TextAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center"> 
      Text Shimmer
</TextBlock>

然後獲取這個TextBlock的Visual對象,用Compositor.CreatePointLight()創建PointLight,並且設置CoordinateSpaceTargets,這兩個屬性用於關聯Visual對象和PointLight。這時候TextBlock變成全黑,除非PointLight應用到它的位置。

_compositor = ElementCompositionPreview.GetElementVisual(TextBlock).Compositor;

//get interop visual for XAML TextBlock
var text = ElementCompositionPreview.GetElementVisual(TextBlock);

_pointLight = _compositor.CreatePointLight();
_pointLight.Color = Colors.White;
_pointLight.CoordinateSpace = text; //set up co-ordinate space for offset
_pointLight.Targets.Add(text); //target XAML TextBlock

PointLight的主要屬性包含Color和Offset,Color預設是白色,而下麵這段代碼實現Offset的動畫。

Offset是一個Vector3的屬性,X、Y和Z代表PointLight的光源在三維空間的坐標。首先將PointLight的Offset設置為TextBlock的左邊,垂直居中,Z為TextBlock的FontSize。然後啟動一個一直重覆的動畫,以TextBlock的右邊為目標水平移動。

//starts out to the left; vertically centered; light's z-offset is related to fontsize
_pointLight.Offset = new Vector3(-(float)TextBlock.ActualWidth, (float)TextBlock.ActualHeight / 2, (float)TextBlock.FontSize);

//simple offset.X animation that runs forever
var animation = _compositor.CreateScalarKeyFrameAnimation();
animation.InsertKeyFrame(1, 2 * (float)TextBlock.ActualWidth);
animation.Duration = TimeSpan.FromSeconds(3.3f);
animation.IterationBehavior = AnimationIterationBehavior.Forever;

_pointLight.StartAnimation("Offset.X", animation);

運行效果如下:

3. 疊加Composition Light

Composition Light可以疊加,效果和光學原理一樣,即紅色加藍色會成為紫色,之類之類的。不過要註意的是除了AmbientLight外,其它光照只可以疊加兩個。

這樣就很有可玩性,例如下麵這個動畫:

4. 結語

上面的動畫可以安裝我的番茄鐘應用試玩一下,安裝地址:

一個番茄鐘

Composition Light玩起來真是一發不可收拾,更多示例可以下載Windows Composition Samples 玩玩。

5. 參考

組合照明 - Windows UWP applications Microsoft Docs

XAML 照明 - Windows UWP applications Microsoft Docs

PointLight Class (Windows.UI.Composition) - Windows UWP applications Microsoft Docs

XamlLight Class (Windows.UI.Xaml.Media) - Windows UWP applications Microsoft Docs

6. 源碼

OnePomodoro_TheBigOne.xaml.cs at master


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
一周排行
    -Advertisement-
    Play Games
  • JWT(JSON Web Token)是一種用於在網路應用之間傳遞信息的開放標準(RFC 7519)。它使用 JSON 對象在安全可靠的方式下傳遞信息,通常用於身份驗證和信息交換。 在Web API中,JWT通常用於對用戶進行身份驗證和授權。當用戶登錄成功後,伺服器會生成一個Token並返回給客戶端 ...
  • 老周在幾個世紀前曾寫過樹莓派相關的 iOT 水文,之所以沒寫 Nano Framework 相關的內容,是因為那時候這貨還不成熟,可玩性不高。不過,這貨現在已經相對完善,老周都把它用在項目上了——第一個是自製的智能插座,這個某寶上50多塊可以買到,搜“esp32 插座”就能找到。一種是 86 型盒子 ...
  • 引言 上一篇我們創建了一個Sample.Api項目和Sample.Repository,並且帶大家熟悉了一下Moq的概念,這一章我們來實戰一下在xUnit項目使用依賴註入。 Xunit.DependencyInjection Xunit.DependencyInjection 是一個用於 xUnit ...
  • 在 Avalonia 中,樣式是定義控制項外觀的一種方式,而控制項主題則是一組樣式和資源,用於定義應用程式的整體外觀和感覺。本文將深入探討這些概念,並提供示例代碼以幫助您更好地理解它們。 樣式是什麼? 樣式是一組屬性,用於定義控制項的外觀。它們可以包括背景色、邊框、字體樣式等。在 Avalonia 中,樣 ...
  • 在處理大型Excel工作簿時,有時候我們需要在工作表中凍結窗格,這樣可以在滾動查看數據的同時保持某些行或列固定不動。凍結窗格可以幫助我們更容易地導航和理解複雜的數據集。相反,當你不需要凍結窗格時,你可能需要解凍它們以獲得完整的視野。 下麵將介紹如何使用免費.NET庫通過C#實現凍結Excel視窗以鎖 ...
  • .NET 部署 IIS 的簡單步驟一: 下載 dotnet-hosting-x.y.z-win.exe ,下載地址:.NET Downloads (Linux, macOS, and Windows) (microsoft.com) .NET 部署 IIS 的簡單步驟二: 選擇對應的版本,點擊進入詳 ...
  • 拓展閱讀 資料庫設計工具-08-概覽 資料庫設計工具-08-powerdesigner 資料庫設計工具-09-mysql workbench 資料庫設計工具-10-dbdesign 資料庫設計工具-11-dbeaver 資料庫設計工具-12-pgmodeler 資料庫設計工具-13-erdplus ...
  • 初識STL STL,(Standard Template Library),即"標準模板庫",由惠普實驗室開發,STL中提供了非常多對信息學奧賽很有用的東西。 vector vetor是STL中的一個容器,可以看作一個不定長的數組,其基本形式為: vector<數據類型> 名字; 如: vector ...
  • 前言 最近自己做了個 Falsk 小項目,在部署上伺服器的時候,發現雖然不乏相關教程,但大多都是將自己項目代碼複製出來,不講核心邏輯,不太簡潔,於是將自己部署的經驗寫成內容分享出來。 uWSGI 簡介 uWSGI: 一種實現了多種協議(包括 uwsgi、http)並能提供伺服器搭建功能的 Pytho ...
  • 1 文本Embedding 將整個文本轉化為實數向量的技術。 Embedding優點是可將離散的詞語或句子轉化為連續的向量,就可用數學方法來處理詞語或句子,捕捉到文本的語義信息,文本和文本的關係信息。 ◉ 優質的Embedding通常會讓語義相似的文本在空間中彼此接近 ◉ 優質的Embedding相 ...