OSDN Ticket Archive


Ticket #39214

iOS版 iPhone XシリーズでVR Viewの立体視ができない

登録: 2019-05-05 22:27 最終更新: 2019-05-05 23:08

報告者:
yknk
担当者:
yknk
チケットの種類:
バグ
状況:
完了
コンポーネント:
MIDITrail Ver.1.2.x for iOS
マイルストーン:
Version 1.2.4 for iOS (完了済み)
優先度:
5 - 中
重要度:
5 - 中
解決法:
修正済み
ファイル:
なし

詳細

iPhone XRをVRグラスに装着して、VR View (Dual Lens)の画面を見たが、立体視できない。 iPhone 7 Plusでは立体視できていた。

チケットの履歴

2019-05-05 22:28 更新者: yknk
  • 新しいチケット "iOS版 iPhone XシリーズでVR Viewの立体視ができない" が作成されました
2019-05-05 22:28 更新者: yknk
コメント

原因

VR View (Dual Lens)の左目用と右目用の描画領域を、単純にスクリーンの二分割にしており、 瞳孔間距離を考慮していなかったため。

iPhone Xシリーズは、ランドスケープのとき以前のiPhoneよりもスクリーンが横長になり、 左目用画像の中心と右目用画像の中心の距離が、瞳孔間距離よりも長くなってしまう。 iPhone 7 Plusは、ランドスケープでスクリーンの横幅が約12cmあり、 左目用画像の中心と右目用画像の中心の距離が約6cmで、瞳孔間距離に近いサイズだったため、 たまたま立体視できていた。

2019-05-05 22:30 更新者: yknk
コメント

対策方針

描画領域のサイズについて

瞳孔間距離を考慮して左目用と右目用の描画領域の横幅を以下の図のように調整する。

|-------------w-------------|
|        |---IPD---|        |
+---+----+----+----+----+---+--
|   |         |         |   | |
|   |         |         |   | |
|   |    L    |    R    |   | h
|   |         |         |   | |
|   |         |         |   | |
+---+---------+---------+---+--
    |---IPD---|---IPD---|

IPD: 瞳孔間距離(Interpupillary distance)
w: スクリーンの横サイズ
h: スクリーンの縦サイズ
IPDの2倍がスクリーンの横サイズを超える場合は、左目用と右目用の描画領域はスクリーンを単純に二分割する。

瞳孔間距離について

VRグラスの瞳孔間距離を実測した結果は以下の通り。

  • エレコムのスマートフォン用VRグラス: 63mm
  • Google CardboardのVRグラス: 63mm

またPSVRのデフォルトの瞳孔間距離は63mmである。

以上の情報から、瞳孔間距離のデフォルト値は63mmとする。 瞳孔間距離の設定変更は次期課題とする。

描画領域の算出方法について

瞳孔間距離を考慮して左目用と右目用の描画領域を算出するために、 スクリーンのピクセル密度を把握する必要がある。 iOSのAPIを用いてピクセル密度を取得する手段はないため、 iPhoneの機種ごとのピクセル密度をプログラム内に保持する。 画面サイズからiPhoneの機種を判別し、ピクセル密度を求める。

2019-05-05 22:31 更新者: yknk
コメント

対策

MTDeviceScreenInfo

メンバにインチあたりのピクセル数(m_PixcelsPerInch)を追加。 メンバにポイントあたりの長さ(m_MmPerPoint)を追加(単位はmm)。

MTDeviceScreenInfo::Initialize

セーフエリア情報初期化とPPI情報初期化のメソッド呼び出しに変更。 変更前の処理内容は_InitializeSafeAreaに移動。

MTDeviceScreenInfo::_InitializeSafeArea

セーフエリア情報初期化メソッドを追加。 Initializeの処理内容を本メソッドに移動。

MTDeviceScreenInfo::_InitializePPI

PPI情報初期化メソッドを追加。

MTDeviceScreenInfo::GetPixcelsPerInch

1インチあたりのピクセル数取得メソッドを追加。

MTDeviceScreenInfo::GetMmPerPoint

1ポイントあたりの長さ(mm)取得メソッドを追加。

MTMainViewCtrl

メンバに瞳孔間距離ポイント数(m_IPDPoints)を追加。

MTMainViewCtrl::initWithNibName

メンバに瞳孔間距離ポイント数初期化処理を追加。

MTMainViewCtrl::initialize

シーンレンダリング処理呼び出しの引数に瞳孔間距離を追加。 VR用パラメータ初期化メソッド呼び出しを追加。

MTMainViewCtrl::drawProc

シーンレンダリング処理呼び出しの引数に瞳孔間距離を追加。

MTMainViewCtrl::initializeVRParameters

VR用パラメータ初期化メソッドを追加。 メンバに瞳孔間距離ポイント数の算出処理を実装。

OGLRenderer::RenderScene

メソッド引数に瞳孔間距離ポイント数を追加。 VR View(Dual Lens)が指定された場合に、瞳孔間距離を考慮して、 左目用と右目用の描画領域の横幅を調整する処理を追加。

2019-05-05 23:08 更新者: yknk
  • 解決法なし から 修正済み に更新されました
  • 状況オープン から 完了 に更新されました

添付ファイルリスト

添付ファイルはありません