1. 程式人生 > >HoloLens開發手記-實現3D應用啟動器

HoloLens開發手記-實現3D應用啟動器

文檔 uwp info lock ID left DC nbsp AS

一直有人問我,第三方應用在HoloLens上可以實現3D啟動圖標嗎?就像微軟官方出的應用那樣。在不久之前,這個問題的答案還是No。

但是隨著最新的Windows build 1803版本的發布,現在我們可以創建3D啟動圖標了。

技術分享圖片

技術分享圖片

實現方法


要實現一個3D啟動器很簡單,三步走:

  1. 設計模型
  2. 優化和導出模型
  3. 集成到應用項目中

關於模型


對於MR應用,想要使用3D啟動器,那麽使用的模型格式必須為.glb,而且必須滿足微軟官方對模型面數和大小的要求。最簡單獲取glb模型的方式是使用Windows 10自帶的Paint 3D應用創建,導出模型文件默認就是glb格式。而且還可以利用微軟的Remix 3D網站,上面有大量的3D模型可以直接拿來在Paint 3D中使用。

關於具體的模型設計要求和優化要求,請直接參照官方文檔:https://docs.microsoft.com/zh-cn/windows/mixed-reality/creating-3d-models-for-use-in-the-windows-mixed-reality-home

技術分享圖片

模型集成


在有了模型文件後,下一步就是將它集成到項目中。繼承的方式很簡單,主要是修改UWP項目的配置文件package.appxmanifest.

首先修改命名空間部分,引入uap5的schema,這樣我們才可以用“MixedRealityModel”標簽來生命啟動模型定義:

<Package xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" 
         xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" 
         xmlns:uap2="http://schemas.microsoft.com/appx/manifest/uap/windows10/2" 
         xmlns:uap5="http://schemas.microsoft.com/appx/manifest/uap/windows10/5"
         IgnorableNamespaces
="uap uap2 uap5 mp" xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10">

下一步修改默認圖標的定義:

<Applications>
    <Application Id="App"
      Executable="$targetnametoken$.exe"
      EntryPoint="ExampleApp.App">
      <uap:VisualElements
        DisplayName="ExampleApp"
        Square150x150Logo="Assets\Logo.png"
        Square44x44Logo="Assets\SmallLogo.png"
        Description="ExampleApp"
        BackgroundColor="#464646">
        <uap:DefaultTile Wide310x150Logo="Assets\WideLogo.png" >
          <uap5:MixedRealityModel Path="Assets\My3DTile.glb" />
        </uap:DefaultTile>
        <uap:SplashScreen Image="Assets\SplashScreen.png" />
      </uap:VisualElements>
    </Application>
</Applications>

這段示例代碼裏我指定了3D模型文件的路徑為“Assets\My3DTile.glb”,實際根據文件正確路徑填寫。

註意:模型文件導入項目後,build action行為要設置為內容(content),這樣才可以被正確識別到。

技術分享圖片

邊框盒子(Bounding Box)


如果我們不指定模型的邊框盒屬性的話,系統會默認生成一個。但是如果有特殊需求的話,可以手動指定邊框盒屬性,設置邊框盒代碼如下:

先引入邊框盒所在命名空間uap6

<Package xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" 
         xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" 
         xmlns:uap2="http://schemas.microsoft.com/appx/manifest/uap/windows10/2" 
         xmlns:uap5="http://schemas.microsoft.com/appx/manifest/uap/windows10/5"
         xmlns:uap6="http://schemas.microsoft.com/appx/manifest/uap/windows10/6"
         IgnorableNamespaces="uap uap2 uap5 uap6 mp"
         xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10">

再修改邊框盒設置,可以設置模型中心位置,以及中心到每個軸的距離。

<uap:DefaultTile Wide310x150Logo="Assets\WideLogo.png" >
          <uap5:MixedRealityModel Path="Assets\My3DTile.glb">
              <uap6:SpatialBoundingBox  Center=”1,-2,3” Extents=”1,2,3” />
          </uap5:MixedRealityModel>
        </uap:DefaultTile>

那麽快速實現3D應用啟動器就搞定了,下面是實際效果:

https://weibo.com/tv/v/GhxQJrMYw?fid=1034:940e672a7047303e11bc96edec7ee456

HoloLens開發手記-實現3D應用啟動器