SlideShare ist ein Scribd-Unternehmen logo
1 von 52
Downloaden Sie, um offline zu lesen
Windows Phoneで始める
拡張現実の世界

2013.03.23
初音玲
はじめに

                Microsoft MVP for
 初音玲               Visual Basic
                    (2008~)


                     最近は
Oracle ACE
                「開発が分かる」
 (2008~)
               クラウドインフラ屋
書籍でました
• VB2012本
Agenda
• 拡張現実とは
• Windows Phone 8について
• WP7.1アプリとの互換性
• 開発環境について
• サンプルコード
拡張現実とは
Wikipediaによれば
• 英語の Augmented Realityの日本語訳であ
  るため、それを日本語発音した「オーグ
  メンテッド・リアリティ」や、省略形の
  ARも用いられる。また、拡張現実感とも
  言う。
• 拡張現実はバーチャルリアリティ(VR)の変
  種であり、その時周囲を取り巻く現実環
  境に情報を付加・削除・強調・減衰させ、
  文字通り人間から見た現実世界を拡張す
  るものを指す。 バーチャルリアリティが
  人工的に構築された現実感と現実を差し
  替えるのに対し、拡張現実は現実の一部
  を改変する技術である。
そこで
• Windows Phoneのカメラビューで
• 現実世界を映し
• そこに情報を付与する
Windows Phone 8について
WP8対応機種
• Nokia:Lumiaシリーズ
• HTC:8X、8S
• Smsung:ATIV S
3つの画面解像度
WVGA    800 x 480    15:9
WXGA    1280 x 768   15:9
720p    1280 x 720   16:9
Windows 8とコア共有(非完全)

共通部分
• カーネル、ネットワーク、グラフィック、
  ファイルシステム、マルチメディア
• ドライバモデル
• Windowsと同等のマルチコア対応

非共通部分
• 同じAPIで開発できる×
  • 今後の新機能は基本的に共通化を考慮
Windows Phone 8 API
                                      WP 8.0 Games
                                 Direct X/Direct 3D & C++

              WP 8.0                                  WP 8.0
      XAML & VB/C# & Direct 3D                      XAML & C++

              WP 8.0                                  WP 8.0
           XAML & VB/C#                             XAML & C++

  WP 7.1
XNA & VB/C#
                      WP7.1= Windows Phone OS 7.1 = Windows Phone 7.1/7.8
   WP 7.1
XAML & VB/C#

.NET API for          Windows
                                                     Win32 &
  Windows               Phone
                                                      COM
   Phone               Runtime
                                                     (native)
 (managed)         (managed/native)
.NET API for         Windows
                                              Win32 &
  Windows             Phone
                                               COM
   Phone             Runtime

• .NET API for Windows Phone
   •   WP7.1にあるすべてのtypeとAPIを含む
   •   System名前空間とMicrosoft.Phone名前空間
• WP8.0追加API
   •Microsoft.Phone.Wallet
   •Microsoft.Phone.Tasks.ShareMediaTask
   •Microsoft.Phone.Tasks.MapsTask
   •Microsoft.Phone.Storage.ExternalStorage
   •Microsoft.Phone.Networking.Voip
   など
.NET API for       Windows
                                    Win32 &
     Windows           Phone
                                     COM
      Phone           Runtime


   • Windows Phone Runtime (WinPRT)
      • WinRTのサブセット + Phone関連の追加
Win RT                     • Phone関連の追加
(約11,000メンバ)                •音声合成と音声認識
                            •カスタム連絡先ストア
                            •ロックスクリーン
    サブセット          追加       など
    (約2,800)      (約600)
.NET APIとWinPRTで同等APIが存在
.NET API                      Windows Phone Runtime API

System.IO.IsolatedStorage     Windows.Storate

System.Net.Sockets            Windows.Networking.Sockets

System.Threading.ThreadPool   Windows.System.Threading.ThreadPool

Microsoft.Devices.Sensors     Windows.Devices.Sensors


   • WP7.1とWP8.0をターゲットにする
      なら.NET API
   • WP8とW8でコード共有するなら
      WinPRT
WP7.1アプリとの互換性
WP7.1アプリとWindows Phone 8
• WP7.1アプリはリコンパイルなしで
  WP8で動作可能
• 完全コンパチではないので多少の違
いはある
  WP7.1            WP8.0   WP8.0   WP7.1
  App     リコンパイル    App     App    App


                                   Quirks

• Quirksモードで動作                 WP8.0
                              rumtime
WP7.1アプリをWP8.0用に変換する
• WP7.1依存のコードがないか注意
 • Quirksモードでの互換性維持の対象外
• ソースコード非互換
• バイナリ非互換
ソースコード非互換の例
Item                          Windows Phone OS 8.0       Windows Phone OS 7.1

IsolatedStorageFile.FileExi   null が渡された場合、              false
stsメソッド                       ArgumentNullException

Mutexクラス                      Mutex名には¥は使用不可             Mutex名に¥が指定される
                                                         と実行時に別文字に変換
                                                         されて正常動作
BeginRead , BeginWrite,       非同期実行                      同期実行
EndRead, EndWrite,

Thread.CurrentCulture         カルチャ変更は                    カルチャ変更は
Thread.CurrentUICulture       該当スレッドのみ影響                 全スレッドに影響

XmlSerializerクラス              シリアル化された型には、 シリアル化された型の既
                              既定のコンストラクター  定のコンストラクターは
                              が必要です。       必須ではありません。
          その他の非互換については
          http://msdn.microsoft.com/ja-jp/library/windowsphone/develop/jj206947.aspx
OSバイナリ非互換の例
Item                        Windows Phone OS 8.0        Windows Phone OS 7.1

Background File Transfers   同時転送ファイル数の制                 同時転送ファイル数の制
                            限が25                        限が5

Networking                  Vary ヘッダーを処理して              ダウンロードが 1 秒以上
                            応答をキャッシュするこ                 かかる前提は不可
                            とが可能
Access to private nested    private入れ子クラスは              private入れ子クラスを
classes                     未サポート                       サポート


         その他の非互換については
         http://msdn.microsoft.com/ja-jp/library/windowsphone/develop/jj206947.aspx
開発環境について
開発環境の入手
• Windows Phone Developer Center
  • 旧→ http://create.msdn.com
  • 新→ http://dev.windowsphone.com
• SDKは無料
• SDKの動作環境
  • Windows 8 64bit版
  • 最低4GBのメモリ
• エミュレータ要件
  • Windows 8 Pro以上
  • SLAT対応ハード(Core iとか)
SLAT対応しているかを確認する
• SysInternalsツール
  • http://technet.microsoft.com/en-
   us/sysinternals/cc835722
• coreinfo –v
  • サポート
    EPT         *
  • サポート外
    EPT         -
デベロッパーセンターアカウント
• http://msdn.microsoft.com/ja-
  jp/library/windowsphone/help/jj206719.aspx
• SDKを使うだけでは不要
• 実機転送、ストア公開には必須
• Microsoftアカウントに紐付け
• 年間$99
  • 有料アプリは無制限に登録可能
  • 無料アプリは100個まで登録可能
• 会社アカウント or 個人アカウント
  • 会社アカウントは登録が面倒
  • 会社アカウントじゃないと使えない機能あり
Windows Phone エミュレータ
• Win 8 Pro以上のHyper-Vで動作
• 実機と同じ環境
• Windows Phone SDKに同封
• 位置情報や端末向きもエミュレート
• エミュレータ環境設定
 • ロックスクリーン
 • ネットワーク接続のシミュレーション
エミュレータを使う上での注意点
• 実機よりも動作が速い可能性がある
 • 性能チェックは実機で要確認
 • エミュレータは機能テスト用
• プロファイリングツールを活用
 • 実機とエミュレータに使用できる
 • http://wptools.codeplex.com/
エミュレータへのデプロイ
• デプロイ先として選択
• 最初にデプロイされると自動起動
 • 停止するとローカルストレージの内容
 は消える
• エミュレータの論理スペック
 • WVGAで512MBメモリ
 • 解像度:720P、WVGA、WXGA
エミュレータの操作方法
• ハードウェアボタンの操作
 • F1:戻るボタン
 • F2:ホームボタン
 • F3:検索ボタン
 • F6:カメラボタン(半押し)
 • F7:カメラボタン(長押し)
 • F9:ボリュームアップ
 • F10:ボリュームダウン
 • F12:電源ボタン
• マルチタッチ対応(要タッチ対応PC)
• PgUp/PgDnでエミュレータキーボードとPC側
 キーボードの切替
向きのエミュレート


    左回転



    右回転
カメラ動作のエミュレート
• 赤い四角が動き回る
位置情報のエミュレート



①   検索
②   ズーム
③   ライブ操作On/Off
④   ピンモードOn/Off
⑤   すべてのポイントをクリア
⑥   マップのポイントを保存
⑦   位置移動間隔(秒)
⑧   すべてのポイントを再生
Additional Tools-Locationでのテスト
• [ライブ]ボタンでライブモードOn
 1. 検索ボックスで地名入力で検索
 2. ピンモードをOn
 3. マップをクリックしてピン追加
      • PositiionChangedイベント発生
• [ライブ]ボタンでライブモードOff
 1.   ピンモードをOn
 2.   マップをクリックしてピン追加
 3.   マップのポイントを保存
 4.   すべてのポイントを再生
      • PositiionChangedイベント発生
ロックスクリーンのエミュレート
• ロックスクリーン表示
 • シミュレーションダッシュボードで設
  定
 • F12を2回押す
ネットワークのシミュレーション
スクリーンショットの保存
• [キャプチャ]でキャプチャ
• [保存]でPCのマイピクチャに保存
Visual Studioでのデバッグ
• Windowsアプリと同じようデバッグ
 • ブレークポイント
 • ステップ実行
 • 変数参照や値変更
Windows Phoneとの接続
• Windows Phone OS 7.1
 • Zune必須
• Windows Phone 8.0
 • Zune不要
端末を開発用に登録する
• 登録手順
 1.   WiFi接続/USBでPCと接続
 2.   Windows Phone Developer
      Registrationを起動
 3.   「Click the Register button to unlock
      the phone」と表示されたら[Register]
      ボタンをクリック
 4.   デベロッパセンターアカウントに紐付
      けたMicrosoftアカウントに[サインイ
      ン]
• 登録できる端末は3台まで
実機へデプロイ!
• ターゲットを[Device]
• 実行で実機にデプロイされて実行
• エミュレータと同様のデバッグ可能
• VSからデプロイできるのは10個まで
 • 開発が終わったアプリはストアから
実機デバッグ
• エミュレータと同じようデバッグ
 • ブレークポイント
 • ステップ実行
 • 変数参照や値変更
実機でのスクリーンショット保存
• Windows Phone 8から可能
• 電源とホームボタンの同時押し
• 実機の[albums]-[screenshots]に保存
国際化対応
• WP8SDKで楽になった
     • 規定言語用にAppResources.resx
     • サポート言語追加
           •   AppResources.xx-xx.resxを自動生成
• XAML上で
     • {Binding Path=LocalizedResources.[Key],
         Source={StaticResource LocalizedStrings}}
• コード上で
     • AppResources.[key]


http://msdn.microsoft.com/ja-jp/library/windowsphone/develop/ff637522.aspx
MDIL: Machine Dependent Intermediate Language

ソース
            コンパイラ              MSIL
コード                                     開発環境




MDIL         MDIL              MSIL      ストア
            コンパイラ


              Native          Native
MDIL          Image            DLL      実行環境

             Generetor
サンプルコード
カメラをコードで操作
•   レンズピッカー
     •   ID_CAP_ISV_CAMERA
     •   標準カメラアプリのファインダーより入力して随時の操作結
         果をファインダーに表示可能
•   Picture.GetPreviewImageメソッドでサムネイル画像を取
    得可能
•   リッチメディアレンズ
     •   ID_CAP_MEDIALIB_PHOTO
     •   Photosハブにある写真に対するエフェクト機能を追加可能
•   バックグラウンドでの写真アップロード
     •   バックグラウンドエージェントで自動アップロード可能
•   CameraAPI
     •   PhotoCaptureDeviceクラスで、ISO、ホワイトバランス、露
         出、ピントを制御
     •   AudioVideoCaptureDeviceクラスは、ビデオと録音に対して
         同等の制御を提供
カメラビューの表示
Dim res As Windows.Foundation.Size = SupportedResolutions(0)
Me.Live = Await PhotoCaptureDevice.OpenAsync(CameraSensorLocation.Back, res)
RaiseEvent Initialized(Nothing, Nothing)

Imports Windows.Phone.Media.Capture

Public ReadOnly Property Live As PhotoCaptureDevice
    Get
        Return Me.VmLiveModel.Live
    End Get
End Property


<Rectangle Grid.Row="0" Stroke="Black" Margin="0,100,0,100">
     <Rectangle.Fill>
         <VideoBrush x:Name="ViewfinderBrush"/>
     </Rectangle.Fill>
</Rectangle>

Me.ViewfinderBrush.SetSource(Me.ViewModel.Live)
コンパス機能の追加
Private WithEvents CompassWatcher As Compass

Me.CompassWatcher = Compass.GetDefault

Private Sub ReadingChanged(sender As Compass,
                           e As CompassReadingChangedEventArgs) _
            Handles CompassWatcher.ReadingChanged
     Me.MagneticHeading = e.Reading.HeadingMagneticNorth
End Sub


Imports Windows.Devices.Sensors

Public ReadOnly Property MagneticHeading As Double
     Get
         Return Me.VmCompassModel.MagneticHeading
     End Get
End Property
コンパス機能の追加
<Grid x:Name="Compass_Grid" RenderTransformOrigin="0.5,0.5">
    <es:RegularPolygon
         Stroke="{StaticResource PhoneAccentBrush}" StrokeThickness="3"
         InnerRadius="1" PointCount="3" Stretch="Fill"
         UseLayoutRounding="False" Width="160" Height="160"
         Margin="127.015,240,127.015,392.478"/>
     <Ellipse Width="320" Height="320"
         Stroke="{StaticResource PhoneAccentBrush}" StrokeThickness="3" />
</Grid>


Private Sub Compass_PropertyChanged(sender As Object,
                                    e As PropertyChangedEventArgs) _
                    Handles ViewModel.PropertyChanged
     Dispatcher.BeginInvoke(
         Sub()
             Dim g As New TransformGroup
             g.Children.Add(New RotateTransform With {
                                .Angle = Me.ViewModel.MagneticHeading})
             Me.Compass_Grid.RenderTransform = g
         End Sub)
End Sub
拡張現実っぽく見える演出
• 端末を傾けると…
 • 見えている映像も視点が変わる
 • コンパスと映像の傾きが合わない

• コンパスも傾くようにすると…
傾きを反映
Private WithEvents MotionWatcher As Inclinometer

Me.MotionWatcher =   Inclinometer.GetDefault

Private Sub ReadingChanged(sender As Inclinometer,
                        e As InclinometerReadingChangedEventArgs) _
            Handles MotionWatcher.ReadingChanged
     Me.Pitch = e.Reading.PitchDegrees
     Me.Yaw = e.Reading.YawDegrees
     Me.Roll = e.Reading.RollDegrees
End Sub
Public ReadOnly Property Pitch As Single
     Get
         Return Me.VmMotionModel.Pitch
     End Get
 End Property
 Public ReadOnly Property Yaw As Single
     Get
         Return Me.VmMotionModel.Yaw
     End Get
 End Property
                  ;
                  ;
傾きを反映
<Grid x:Name="D3D_Grid" Grid.Row="0" RenderTransformOrigin="0.5,0.5">
    <Grid x:Name="Compass_Grid" RenderTransformOrigin="0.5,0.5">
                           :
    </Grid>
</Grid>

Private Sub Compass_PropertyChanged(sender As Object,
                                    e As PropertyChangedEventArgs) _
                    Handles ViewModel.PropertyChanged
     Dispatcher.BeginInvoke(
         Sub()
             Dim g As New TransformGroup
             g.Children.Add(New RotateTransform With {
                                .Angle = Me.ViewModel.MagneticHeading})
             Me.Compass_Grid.RenderTransform = g
             Me.D3D_Grid.Projection = New PlaneProjection With {
                                          .RotationX = Me.ViewModel.Pitch,
                                          .RotationY = Me.ViewModel.Roll}
         End Sub)
End Sub
Demo
PhotoARSample

Weitere ähnliche Inhalte

Was ist angesagt?

デスクトップ アプリがこの先生きのこるには
デスクトップ アプリがこの先生きのこるにはデスクトップ アプリがこの先生きのこるには
デスクトップ アプリがこの先生きのこるにはManato KAMEYA
 
剣と魔法のログレス(PC版)の自慢と課題
剣と魔法のログレス(PC版)の自慢と課題剣と魔法のログレス(PC版)の自慢と課題
剣と魔法のログレス(PC版)の自慢と課題AimingStudy
 
デスクトップ アプリがこの先生きのこるには (2)
デスクトップ アプリがこの先生きのこるには (2)デスクトップ アプリがこの先生きのこるには (2)
デスクトップ アプリがこの先生きのこるには (2)Manato KAMEYA
 
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6信之 岩永
 
ゲーム開発環境、もっと楽にできるよ♬ マインクラフトでも実践している DevOpsでゲーム開発を効率化しよう!
ゲーム開発環境、もっと楽にできるよ♬  マインクラフトでも実践している DevOpsでゲーム開発を効率化しよう!ゲーム開発環境、もっと楽にできるよ♬  マインクラフトでも実践している DevOpsでゲーム開発を効率化しよう!
ゲーム開発環境、もっと楽にできるよ♬ マインクラフトでも実践している DevOpsでゲーム開発を効率化しよう!Hiroko Umetsu
 
年の瀬リアルタイム通信サーバ勉強会
年の瀬リアルタイム通信サーバ勉強会年の瀬リアルタイム通信サーバ勉強会
年の瀬リアルタイム通信サーバ勉強会モノビット エンジン
 
.NET 6 時代のデスクトップ アプリケーション開発
.NET 6 時代のデスクトップ アプリケーション開発.NET 6 時代のデスクトップ アプリケーション開発
.NET 6 時代のデスクトップ アプリケーション開発Fujio Kojima
 
ここが変わったTizen sdk2.0alpha
ここが変わったTizen sdk2.0alphaここが変わったTizen sdk2.0alpha
ここが変わったTizen sdk2.0alphaHiroshi Sakate
 
Windowsの画面スケーリングを きちんと理解しよう
Windowsの画面スケーリングをきちんと理解しようWindowsの画面スケーリングをきちんと理解しよう
Windowsの画面スケーリングを きちんと理解しようYuya Yamaki
 
VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報 - モノビットエンジン - GTMF 2018 O...
VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報 - モノビットエンジン - GTMF 2018 O...VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報 - モノビットエンジン - GTMF 2018 O...
VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報 - モノビットエンジン - GTMF 2018 O...Game Tools & Middleware Forum
 
Phone gap+javascriptスマホアプリ開発(入門編)
Phone gap+javascriptスマホアプリ開発(入門編)Phone gap+javascriptスマホアプリ開発(入門編)
Phone gap+javascriptスマホアプリ開発(入門編)Monaca
 
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYOFINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYOGame Tools & Middleware Forum
 
クライアントプログラムだけで マルチプレイが簡単に実装できる! 新製品「Monobit Unity Networking」と 新製品「モノビットエンジン・...
クライアントプログラムだけで マルチプレイが簡単に実装できる! 新製品「Monobit Unity Networking」と 新製品「モノビットエンジン・...クライアントプログラムだけで マルチプレイが簡単に実装できる! 新製品「Monobit Unity Networking」と 新製品「モノビットエンジン・...
クライアントプログラムだけで マルチプレイが簡単に実装できる! 新製品「Monobit Unity Networking」と 新製品「モノビットエンジン・...monobit
 
XpagesDay 2014 [A-2] スタンダードクライアントで xpages を使ってみよう
XpagesDay 2014 [A-2] スタンダードクライアントで xpages を使ってみようXpagesDay 2014 [A-2] スタンダードクライアントで xpages を使ってみよう
XpagesDay 2014 [A-2] スタンダードクライアントで xpages を使ってみようTakeshi Yoshida
 
Windows Phone 8 アプリ開発 01.概要
Windows Phone 8 アプリ開発 01.概要Windows Phone 8 アプリ開発 01.概要
Windows Phone 8 アプリ開発 01.概要Akira Hatsune
 
Unity×HTMLで作るiPhone オンラインゲーム開発事例
Unity×HTMLで作るiPhone オンラインゲーム開発事例Unity×HTMLで作るiPhone オンラインゲーム開発事例
Unity×HTMLで作るiPhone オンラインゲーム開発事例Kouji Hosoda
 
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!Unity Technologies Japan K.K.
 
今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)
今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)
今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)Takeshi Yoshida
 

Was ist angesagt? (20)

デスクトップ アプリがこの先生きのこるには
デスクトップ アプリがこの先生きのこるにはデスクトップ アプリがこの先生きのこるには
デスクトップ アプリがこの先生きのこるには
 
剣と魔法のログレス(PC版)の自慢と課題
剣と魔法のログレス(PC版)の自慢と課題剣と魔法のログレス(PC版)の自慢と課題
剣と魔法のログレス(PC版)の自慢と課題
 
デスクトップ アプリがこの先生きのこるには (2)
デスクトップ アプリがこの先生きのこるには (2)デスクトップ アプリがこの先生きのこるには (2)
デスクトップ アプリがこの先生きのこるには (2)
 
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6
 
ゲーム開発環境、もっと楽にできるよ♬ マインクラフトでも実践している DevOpsでゲーム開発を効率化しよう!
ゲーム開発環境、もっと楽にできるよ♬  マインクラフトでも実践している DevOpsでゲーム開発を効率化しよう!ゲーム開発環境、もっと楽にできるよ♬  マインクラフトでも実践している DevOpsでゲーム開発を効率化しよう!
ゲーム開発環境、もっと楽にできるよ♬ マインクラフトでも実践している DevOpsでゲーム開発を効率化しよう!
 
年の瀬リアルタイム通信サーバ勉強会
年の瀬リアルタイム通信サーバ勉強会年の瀬リアルタイム通信サーバ勉強会
年の瀬リアルタイム通信サーバ勉強会
 
.NET 6 時代のデスクトップ アプリケーション開発
.NET 6 時代のデスクトップ アプリケーション開発.NET 6 時代のデスクトップ アプリケーション開発
.NET 6 時代のデスクトップ アプリケーション開発
 
ここが変わったTizen sdk2.0alpha
ここが変わったTizen sdk2.0alphaここが変わったTizen sdk2.0alpha
ここが変わったTizen sdk2.0alpha
 
Windowsの画面スケーリングを きちんと理解しよう
Windowsの画面スケーリングをきちんと理解しようWindowsの画面スケーリングをきちんと理解しよう
Windowsの画面スケーリングを きちんと理解しよう
 
VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報 - モノビットエンジン - GTMF 2018 O...
VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報 - モノビットエンジン - GTMF 2018 O...VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報 - モノビットエンジン - GTMF 2018 O...
VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報 - モノビットエンジン - GTMF 2018 O...
 
Phone gap+javascriptスマホアプリ開発(入門編)
Phone gap+javascriptスマホアプリ開発(入門編)Phone gap+javascriptスマホアプリ開発(入門編)
Phone gap+javascriptスマホアプリ開発(入門編)
 
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらいCEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
 
Unreal Engine 4.27 ノンゲーム向け新機能まとめ
Unreal Engine 4.27 ノンゲーム向け新機能まとめUnreal Engine 4.27 ノンゲーム向け新機能まとめ
Unreal Engine 4.27 ノンゲーム向け新機能まとめ
 
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYOFINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
 
クライアントプログラムだけで マルチプレイが簡単に実装できる! 新製品「Monobit Unity Networking」と 新製品「モノビットエンジン・...
クライアントプログラムだけで マルチプレイが簡単に実装できる! 新製品「Monobit Unity Networking」と 新製品「モノビットエンジン・...クライアントプログラムだけで マルチプレイが簡単に実装できる! 新製品「Monobit Unity Networking」と 新製品「モノビットエンジン・...
クライアントプログラムだけで マルチプレイが簡単に実装できる! 新製品「Monobit Unity Networking」と 新製品「モノビットエンジン・...
 
XpagesDay 2014 [A-2] スタンダードクライアントで xpages を使ってみよう
XpagesDay 2014 [A-2] スタンダードクライアントで xpages を使ってみようXpagesDay 2014 [A-2] スタンダードクライアントで xpages を使ってみよう
XpagesDay 2014 [A-2] スタンダードクライアントで xpages を使ってみよう
 
Windows Phone 8 アプリ開発 01.概要
Windows Phone 8 アプリ開発 01.概要Windows Phone 8 アプリ開発 01.概要
Windows Phone 8 アプリ開発 01.概要
 
Unity×HTMLで作るiPhone オンラインゲーム開発事例
Unity×HTMLで作るiPhone オンラインゲーム開発事例Unity×HTMLで作るiPhone オンラインゲーム開発事例
Unity×HTMLで作るiPhone オンラインゲーム開発事例
 
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
 
今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)
今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)
今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)
 

Ähnlich wie Windows Phoneで始める拡張現実の世界

Windows 8時代のアプリ開発
Windows 8時代のアプリ開発Windows 8時代のアプリ開発
Windows 8時代のアプリ開発信之 岩永
 
WindowsPhone8 って知ってるかい?
WindowsPhone8 って知ってるかい?WindowsPhone8 って知ってるかい?
WindowsPhone8 って知ってるかい?Akira Hatsune
 
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
Windows アプリケーション開発はじめに ~ Windows アプリケーション開発初学者の方向けVisual Studio を使ったアプリケーショ...Windows アプリケーション開発はじめに ~ Windows アプリケーション開発初学者の方向けVisual Studio を使ったアプリケーショ...
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...Fujio Kojima
 
Windows phone SDK 8.0でのアプリ開発
Windows phone SDK 8.0でのアプリ開発Windows phone SDK 8.0でのアプリ開発
Windows phone SDK 8.0でのアプリ開発Nobuaki Aoki
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンスKaoru NAKAMURA
 
ストアアプリ →universal Windows Apps =WP8.1アプリ
ストアアプリ→universal Windows Apps=WP8.1アプリストアアプリ→universal Windows Apps=WP8.1アプリ
ストアアプリ →universal Windows Apps =WP8.1アプリAkira Hatsune
 
Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版Yoshito Tabuchi
 
[TL03] あなたはどっち? Visual Studio Code 派と Visual Studio 派による Web フロントエンド開発 徹底紹介
[TL03] あなたはどっち? Visual Studio Code 派と Visual Studio 派による Web フロントエンド開発 徹底紹介[TL03] あなたはどっち? Visual Studio Code 派と Visual Studio 派による Web フロントエンド開発 徹底紹介
[TL03] あなたはどっち? Visual Studio Code 派と Visual Studio 派による Web フロントエンド開発 徹底紹介de:code 2017
 
クラウドサービスを使って作る動画サイト?
クラウドサービスを使って作る動画サイト?クラウドサービスを使って作る動画サイト?
クラウドサービスを使って作る動画サイト?Daichi Isami
 
どうなる?Windows 8時代の業務アプリ開発
どうなる?Windows 8時代の業務アプリ開発どうなる?Windows 8時代の業務アプリ開発
どうなる?Windows 8時代の業務アプリ開発Yuya Yamaki
 
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!Akira Inoue
 
Windowsストアアプリ開発 オープンセミナー広島
Windowsストアアプリ開発 オープンセミナー広島Windowsストアアプリ開発 オープンセミナー広島
Windowsストアアプリ開発 オープンセミナー広島Akira Onishi
 
DEV-008_Developing on the Edge. ~Web プラットフォームと Cordova~
DEV-008_Developing on the Edge. ~Web プラットフォームと Cordova~DEV-008_Developing on the Edge. ~Web プラットフォームと Cordova~
DEV-008_Developing on the Edge. ~Web プラットフォームと Cordova~decode2016
 

Ähnlich wie Windows Phoneで始める拡張現実の世界 (20)

20050903
2005090320050903
20050903
 
Windows 8時代のアプリ開発
Windows 8時代のアプリ開発Windows 8時代のアプリ開発
Windows 8時代のアプリ開発
 
WindowsPhone8 って知ってるかい?
WindowsPhone8 って知ってるかい?WindowsPhone8 って知ってるかい?
WindowsPhone8 って知ってるかい?
 
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
Windows アプリケーション開発はじめに ~ Windows アプリケーション開発初学者の方向けVisual Studio を使ったアプリケーショ...Windows アプリケーション開発はじめに ~ Windows アプリケーション開発初学者の方向けVisual Studio を使ったアプリケーショ...
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
 
Windows phone SDK 8.0でのアプリ開発
Windows phone SDK 8.0でのアプリ開発Windows phone SDK 8.0でのアプリ開発
Windows phone SDK 8.0でのアプリ開発
 
20060419
2006041920060419
20060419
 
Silverlightの今
Silverlightの今Silverlightの今
Silverlightの今
 
.NET vNext
.NET vNext.NET vNext
.NET vNext
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンス
 
広がる .Net
広がる .Net広がる .Net
広がる .Net
 
ストアアプリ →universal Windows Apps =WP8.1アプリ
ストアアプリ→universal Windows Apps=WP8.1アプリストアアプリ→universal Windows Apps=WP8.1アプリ
ストアアプリ →universal Windows Apps =WP8.1アプリ
 
Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版Xamarin 概要 2014年08月版
Xamarin 概要 2014年08月版
 
[TL03] あなたはどっち? Visual Studio Code 派と Visual Studio 派による Web フロントエンド開発 徹底紹介
[TL03] あなたはどっち? Visual Studio Code 派と Visual Studio 派による Web フロントエンド開発 徹底紹介[TL03] あなたはどっち? Visual Studio Code 派と Visual Studio 派による Web フロントエンド開発 徹底紹介
[TL03] あなたはどっち? Visual Studio Code 派と Visual Studio 派による Web フロントエンド開発 徹底紹介
 
クラウドサービスを使って作る動画サイト?
クラウドサービスを使って作る動画サイト?クラウドサービスを使って作る動画サイト?
クラウドサービスを使って作る動画サイト?
 
どうなる?Windows 8時代の業務アプリ開発
どうなる?Windows 8時代の業務アプリ開発どうなる?Windows 8時代の業務アプリ開発
どうなる?Windows 8時代の業務アプリ開発
 
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!
 
C#の書き方
C#の書き方C#の書き方
C#の書き方
 
C#の書き方
C#の書き方C#の書き方
C#の書き方
 
Windowsストアアプリ開発 オープンセミナー広島
Windowsストアアプリ開発 オープンセミナー広島Windowsストアアプリ開発 オープンセミナー広島
Windowsストアアプリ開発 オープンセミナー広島
 
DEV-008_Developing on the Edge. ~Web プラットフォームと Cordova~
DEV-008_Developing on the Edge. ~Web プラットフォームと Cordova~DEV-008_Developing on the Edge. ~Web プラットフォームと Cordova~
DEV-008_Developing on the Edge. ~Web プラットフォームと Cordova~
 

Windows Phoneで始める拡張現実の世界

  • 2. はじめに Microsoft MVP for 初音玲 Visual Basic (2008~) 最近は Oracle ACE 「開発が分かる」 (2008~) クラウドインフラ屋
  • 4. Agenda • 拡張現実とは • Windows Phone 8について • WP7.1アプリとの互換性 • 開発環境について • サンプルコード
  • 6. Wikipediaによれば • 英語の Augmented Realityの日本語訳であ るため、それを日本語発音した「オーグ メンテッド・リアリティ」や、省略形の ARも用いられる。また、拡張現実感とも 言う。 • 拡張現実はバーチャルリアリティ(VR)の変 種であり、その時周囲を取り巻く現実環 境に情報を付加・削除・強調・減衰させ、 文字通り人間から見た現実世界を拡張す るものを指す。 バーチャルリアリティが 人工的に構築された現実感と現実を差し 替えるのに対し、拡張現実は現実の一部 を改変する技術である。
  • 7. そこで • Windows Phoneのカメラビューで • 現実世界を映し • そこに情報を付与する
  • 10. 3つの画面解像度 WVGA 800 x 480 15:9 WXGA 1280 x 768 15:9 720p 1280 x 720 16:9
  • 11. Windows 8とコア共有(非完全) 共通部分 • カーネル、ネットワーク、グラフィック、 ファイルシステム、マルチメディア • ドライバモデル • Windowsと同等のマルチコア対応 非共通部分 • 同じAPIで開発できる× • 今後の新機能は基本的に共通化を考慮
  • 12. Windows Phone 8 API WP 8.0 Games Direct X/Direct 3D & C++ WP 8.0 WP 8.0 XAML & VB/C# & Direct 3D XAML & C++ WP 8.0 WP 8.0 XAML & VB/C# XAML & C++ WP 7.1 XNA & VB/C# WP7.1= Windows Phone OS 7.1 = Windows Phone 7.1/7.8 WP 7.1 XAML & VB/C# .NET API for Windows Win32 & Windows Phone COM Phone Runtime (native) (managed) (managed/native)
  • 13. .NET API for Windows Win32 & Windows Phone COM Phone Runtime • .NET API for Windows Phone • WP7.1にあるすべてのtypeとAPIを含む • System名前空間とMicrosoft.Phone名前空間 • WP8.0追加API •Microsoft.Phone.Wallet •Microsoft.Phone.Tasks.ShareMediaTask •Microsoft.Phone.Tasks.MapsTask •Microsoft.Phone.Storage.ExternalStorage •Microsoft.Phone.Networking.Voip など
  • 14. .NET API for Windows Win32 & Windows Phone COM Phone Runtime • Windows Phone Runtime (WinPRT) • WinRTのサブセット + Phone関連の追加 Win RT • Phone関連の追加 (約11,000メンバ) •音声合成と音声認識 •カスタム連絡先ストア •ロックスクリーン サブセット 追加 など (約2,800) (約600)
  • 15. .NET APIとWinPRTで同等APIが存在 .NET API Windows Phone Runtime API System.IO.IsolatedStorage Windows.Storate System.Net.Sockets Windows.Networking.Sockets System.Threading.ThreadPool Windows.System.Threading.ThreadPool Microsoft.Devices.Sensors Windows.Devices.Sensors • WP7.1とWP8.0をターゲットにする なら.NET API • WP8とW8でコード共有するなら WinPRT
  • 17. WP7.1アプリとWindows Phone 8 • WP7.1アプリはリコンパイルなしで WP8で動作可能 • 完全コンパチではないので多少の違 いはある WP7.1 WP8.0 WP8.0 WP7.1 App リコンパイル App App App Quirks • Quirksモードで動作 WP8.0 rumtime
  • 18. WP7.1アプリをWP8.0用に変換する • WP7.1依存のコードがないか注意 • Quirksモードでの互換性維持の対象外 • ソースコード非互換 • バイナリ非互換
  • 19. ソースコード非互換の例 Item Windows Phone OS 8.0 Windows Phone OS 7.1 IsolatedStorageFile.FileExi null が渡された場合、 false stsメソッド ArgumentNullException Mutexクラス Mutex名には¥は使用不可 Mutex名に¥が指定される と実行時に別文字に変換 されて正常動作 BeginRead , BeginWrite, 非同期実行 同期実行 EndRead, EndWrite, Thread.CurrentCulture カルチャ変更は カルチャ変更は Thread.CurrentUICulture 該当スレッドのみ影響 全スレッドに影響 XmlSerializerクラス シリアル化された型には、 シリアル化された型の既 既定のコンストラクター 定のコンストラクターは が必要です。 必須ではありません。 その他の非互換については http://msdn.microsoft.com/ja-jp/library/windowsphone/develop/jj206947.aspx
  • 20. OSバイナリ非互換の例 Item Windows Phone OS 8.0 Windows Phone OS 7.1 Background File Transfers 同時転送ファイル数の制 同時転送ファイル数の制 限が25 限が5 Networking Vary ヘッダーを処理して ダウンロードが 1 秒以上 応答をキャッシュするこ かかる前提は不可 とが可能 Access to private nested private入れ子クラスは private入れ子クラスを classes 未サポート サポート その他の非互換については http://msdn.microsoft.com/ja-jp/library/windowsphone/develop/jj206947.aspx
  • 22. 開発環境の入手 • Windows Phone Developer Center • 旧→ http://create.msdn.com • 新→ http://dev.windowsphone.com • SDKは無料 • SDKの動作環境 • Windows 8 64bit版 • 最低4GBのメモリ • エミュレータ要件 • Windows 8 Pro以上 • SLAT対応ハード(Core iとか)
  • 23. SLAT対応しているかを確認する • SysInternalsツール • http://technet.microsoft.com/en- us/sysinternals/cc835722 • coreinfo –v • サポート EPT * • サポート外 EPT -
  • 24. デベロッパーセンターアカウント • http://msdn.microsoft.com/ja- jp/library/windowsphone/help/jj206719.aspx • SDKを使うだけでは不要 • 実機転送、ストア公開には必須 • Microsoftアカウントに紐付け • 年間$99 • 有料アプリは無制限に登録可能 • 無料アプリは100個まで登録可能 • 会社アカウント or 個人アカウント • 会社アカウントは登録が面倒 • 会社アカウントじゃないと使えない機能あり
  • 25. Windows Phone エミュレータ • Win 8 Pro以上のHyper-Vで動作 • 実機と同じ環境 • Windows Phone SDKに同封 • 位置情報や端末向きもエミュレート • エミュレータ環境設定 • ロックスクリーン • ネットワーク接続のシミュレーション
  • 26. エミュレータを使う上での注意点 • 実機よりも動作が速い可能性がある • 性能チェックは実機で要確認 • エミュレータは機能テスト用 • プロファイリングツールを活用 • 実機とエミュレータに使用できる • http://wptools.codeplex.com/
  • 27. エミュレータへのデプロイ • デプロイ先として選択 • 最初にデプロイされると自動起動 • 停止するとローカルストレージの内容 は消える • エミュレータの論理スペック • WVGAで512MBメモリ • 解像度:720P、WVGA、WXGA
  • 28. エミュレータの操作方法 • ハードウェアボタンの操作 • F1:戻るボタン • F2:ホームボタン • F3:検索ボタン • F6:カメラボタン(半押し) • F7:カメラボタン(長押し) • F9:ボリュームアップ • F10:ボリュームダウン • F12:電源ボタン • マルチタッチ対応(要タッチ対応PC) • PgUp/PgDnでエミュレータキーボードとPC側 キーボードの切替
  • 29. 向きのエミュレート 左回転 右回転
  • 31. 位置情報のエミュレート ① 検索 ② ズーム ③ ライブ操作On/Off ④ ピンモードOn/Off ⑤ すべてのポイントをクリア ⑥ マップのポイントを保存 ⑦ 位置移動間隔(秒) ⑧ すべてのポイントを再生
  • 32. Additional Tools-Locationでのテスト • [ライブ]ボタンでライブモードOn 1. 検索ボックスで地名入力で検索 2. ピンモードをOn 3. マップをクリックしてピン追加 • PositiionChangedイベント発生 • [ライブ]ボタンでライブモードOff 1. ピンモードをOn 2. マップをクリックしてピン追加 3. マップのポイントを保存 4. すべてのポイントを再生 • PositiionChangedイベント発生
  • 33. ロックスクリーンのエミュレート • ロックスクリーン表示 • シミュレーションダッシュボードで設 定 • F12を2回押す
  • 36. Visual Studioでのデバッグ • Windowsアプリと同じようデバッグ • ブレークポイント • ステップ実行 • 変数参照や値変更
  • 37. Windows Phoneとの接続 • Windows Phone OS 7.1 • Zune必須 • Windows Phone 8.0 • Zune不要
  • 38. 端末を開発用に登録する • 登録手順 1. WiFi接続/USBでPCと接続 2. Windows Phone Developer Registrationを起動 3. 「Click the Register button to unlock the phone」と表示されたら[Register] ボタンをクリック 4. デベロッパセンターアカウントに紐付 けたMicrosoftアカウントに[サインイ ン] • 登録できる端末は3台まで
  • 39. 実機へデプロイ! • ターゲットを[Device] • 実行で実機にデプロイされて実行 • エミュレータと同様のデバッグ可能 • VSからデプロイできるのは10個まで • 開発が終わったアプリはストアから
  • 40. 実機デバッグ • エミュレータと同じようデバッグ • ブレークポイント • ステップ実行 • 変数参照や値変更
  • 41. 実機でのスクリーンショット保存 • Windows Phone 8から可能 • 電源とホームボタンの同時押し • 実機の[albums]-[screenshots]に保存
  • 42. 国際化対応 • WP8SDKで楽になった • 規定言語用にAppResources.resx • サポート言語追加 • AppResources.xx-xx.resxを自動生成 • XAML上で • {Binding Path=LocalizedResources.[Key], Source={StaticResource LocalizedStrings}} • コード上で • AppResources.[key] http://msdn.microsoft.com/ja-jp/library/windowsphone/develop/ff637522.aspx
  • 43. MDIL: Machine Dependent Intermediate Language ソース コンパイラ MSIL コード 開発環境 MDIL MDIL MSIL ストア コンパイラ Native Native MDIL Image DLL 実行環境 Generetor
  • 45. カメラをコードで操作 • レンズピッカー • ID_CAP_ISV_CAMERA • 標準カメラアプリのファインダーより入力して随時の操作結 果をファインダーに表示可能 • Picture.GetPreviewImageメソッドでサムネイル画像を取 得可能 • リッチメディアレンズ • ID_CAP_MEDIALIB_PHOTO • Photosハブにある写真に対するエフェクト機能を追加可能 • バックグラウンドでの写真アップロード • バックグラウンドエージェントで自動アップロード可能 • CameraAPI • PhotoCaptureDeviceクラスで、ISO、ホワイトバランス、露 出、ピントを制御 • AudioVideoCaptureDeviceクラスは、ビデオと録音に対して 同等の制御を提供
  • 46. カメラビューの表示 Dim res As Windows.Foundation.Size = SupportedResolutions(0) Me.Live = Await PhotoCaptureDevice.OpenAsync(CameraSensorLocation.Back, res) RaiseEvent Initialized(Nothing, Nothing) Imports Windows.Phone.Media.Capture Public ReadOnly Property Live As PhotoCaptureDevice Get Return Me.VmLiveModel.Live End Get End Property <Rectangle Grid.Row="0" Stroke="Black" Margin="0,100,0,100"> <Rectangle.Fill> <VideoBrush x:Name="ViewfinderBrush"/> </Rectangle.Fill> </Rectangle> Me.ViewfinderBrush.SetSource(Me.ViewModel.Live)
  • 47. コンパス機能の追加 Private WithEvents CompassWatcher As Compass Me.CompassWatcher = Compass.GetDefault Private Sub ReadingChanged(sender As Compass, e As CompassReadingChangedEventArgs) _ Handles CompassWatcher.ReadingChanged Me.MagneticHeading = e.Reading.HeadingMagneticNorth End Sub Imports Windows.Devices.Sensors Public ReadOnly Property MagneticHeading As Double Get Return Me.VmCompassModel.MagneticHeading End Get End Property
  • 48. コンパス機能の追加 <Grid x:Name="Compass_Grid" RenderTransformOrigin="0.5,0.5"> <es:RegularPolygon Stroke="{StaticResource PhoneAccentBrush}" StrokeThickness="3" InnerRadius="1" PointCount="3" Stretch="Fill" UseLayoutRounding="False" Width="160" Height="160" Margin="127.015,240,127.015,392.478"/> <Ellipse Width="320" Height="320" Stroke="{StaticResource PhoneAccentBrush}" StrokeThickness="3" /> </Grid> Private Sub Compass_PropertyChanged(sender As Object, e As PropertyChangedEventArgs) _ Handles ViewModel.PropertyChanged Dispatcher.BeginInvoke( Sub() Dim g As New TransformGroup g.Children.Add(New RotateTransform With { .Angle = Me.ViewModel.MagneticHeading}) Me.Compass_Grid.RenderTransform = g End Sub) End Sub
  • 49. 拡張現実っぽく見える演出 • 端末を傾けると… • 見えている映像も視点が変わる • コンパスと映像の傾きが合わない • コンパスも傾くようにすると…
  • 50. 傾きを反映 Private WithEvents MotionWatcher As Inclinometer Me.MotionWatcher = Inclinometer.GetDefault Private Sub ReadingChanged(sender As Inclinometer, e As InclinometerReadingChangedEventArgs) _ Handles MotionWatcher.ReadingChanged Me.Pitch = e.Reading.PitchDegrees Me.Yaw = e.Reading.YawDegrees Me.Roll = e.Reading.RollDegrees End Sub Public ReadOnly Property Pitch As Single Get Return Me.VmMotionModel.Pitch End Get End Property Public ReadOnly Property Yaw As Single Get Return Me.VmMotionModel.Yaw End Get End Property ; ;
  • 51. 傾きを反映 <Grid x:Name="D3D_Grid" Grid.Row="0" RenderTransformOrigin="0.5,0.5"> <Grid x:Name="Compass_Grid" RenderTransformOrigin="0.5,0.5"> : </Grid> </Grid> Private Sub Compass_PropertyChanged(sender As Object, e As PropertyChangedEventArgs) _ Handles ViewModel.PropertyChanged Dispatcher.BeginInvoke( Sub() Dim g As New TransformGroup g.Children.Add(New RotateTransform With { .Angle = Me.ViewModel.MagneticHeading}) Me.Compass_Grid.RenderTransform = g Me.D3D_Grid.Projection = New PlaneProjection With { .RotationX = Me.ViewModel.Pitch, .RotationY = Me.ViewModel.Roll} End Sub) End Sub