Ticket #38898

iOS版 VRビュー対応

Open Date: 2019-01-28 00:15 Last Update: 2019-01-31 23:39

Reporter:
Owner:
Status:
Closed
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
Fixed
File:
None

Details

VRビューに対応する。以下の二つの機能をメイン画面に実装する。

  • (1) デバイスの向きに応じて、視線方向を変化させる。
  • (2) 画面を左右に分割し、それぞれ左目用と右目用の画像を描画する。

スマートフォン用の安価なVRゴーグルを利用することで、VR体験を可能とする。

Viewボタンをタップしたときのメニューに、VRビュー選択メニューを追加する。

  • Standard View : 通常画面
  • VR View (Single Lens) : VRビュー(一眼) - 機能(1)を有効にする
  • VR View (Dual Lens) : VRビュー(二眼) - 機能(1)(2)を有効にする

制限事項:VRビュー(二眼)では、背景画像表示、カウンタ表示を無効にする。

Ticket History (3/5 Histories)

2019-01-28 00:15 Updated by: yknk
  • New Ticket "iOS版 VRビュー対応" created
2019-01-28 00:17 Updated by: yknk
Comment

対策1 プロジェクト設定

プロジェクト設定

デバイスの方向を取得するため、 Linked Frameworks and Libraries に CoreMotion.framework を追加。

プロジェクト設定

デバイスモーションを取得するため、フレームワークを追加。

  • 設定場所 Targets / MIDITrail / General / Linked Frameworks and Libraries
  • 追加項目 CoreMotion.framework

MIDITrail-Info.plist

デバイスモーションを取得するため、以下のKey/Valueを登録。

  • Key: NSMotionUsageDescription
  • Value: This app accesses the device motion tracking hardware to display VR view.

対策2 アプリケーションメイン

MTMainViewCtrl

メインビュー制御クラスのメンバにスクリーン種別 m_ScreenType、デバイスモーション管理 m_pMotionManager を追加。

MTMainViewCtrl::initWithNibName

追加したメンバの初期化処理を追加。

MTMainViewCtrl::startScene

シーンにスクリーン種別を設定する処理を追加。 VRビューの場合はモーションセンサ利用開始する処理を追加。

MTMainViewCtrl::stopScene

モーションセンサ利用終了する処理を追加。

MTMainViewCtrl::scene_SetScreenType

スクリーン種別設定メソッドを追加。

MTMainViewCtrl::drawScene

VRビューの場合は、デバイス方向をカメラ方向に反映するメソッドを呼び出す処理を追加。

MTMainViewCtrl::drawProc

レンダリング処理呼び出しの引数に、VRビュー(二眼)のフラグを追加。

MTMainViewCtrl::onViewButton

Viewボタンがタップされたときに表示するメニューに、スクリーン種別選択メニュー "Standard View","VR View (Single Lens)","VR View (Dual Lens)"を追加。

MTMainViewCtrl::actionSheet

スクリーン種別選択メニューが選択されたときの処理を追加。

MTMainViewCtrl::updateDeviceDirection

デバイス方向更新メソッドを追加。

対策3 シーン基底クラス

MTScene

シーン基底クラスに、スクリーン種別のenumを追加。

MTScene::Transform

引数にカメラ種別を追加。

MTScene::Draw

引数にカメラ種別を追加。

MTScene::SetScreenType

スクリーン種別設定メソッドを追加。

MTScene::SetDeviceDirection

デバイス方向設定メソッドを追加。

対策4 シーンクラス

MTScenePianoRoll3D

メンバにスクリーン種別 m_ScreenType を追加。

MTScenePianoRoll3D::MTScenePianoRoll3D

コンストラクタにスクリーン種別の初期化処理を追加。

MTScenePianoRoll3D::Transform

引数にカメラ種別を追加。 指定されたカメラ種別ごとに、カメラオブジェクトの更新メソッドの呼び出し方を切り替える。

MTScenePianoRoll3D::Draw

引数にカメラ種別を追加。 指定されたカメラ種別がVRビュー(二眼)の場合は、背景画像とダッシュボードを描画しないように修正。 更新メソッド Transform の呼び出し引数に、スクリーン種別を追加。

MTScenePianoRoll3D::SetScreenType

スクリーン種別設定メソッドを追加。

MTScenePianoRoll3D::SetDeviceDirection

デバイス方向設定メソッドを追加。

以上の修正を他のシーンクラスにも適用

MTScenePianoRoll3DLive, MTScenePianoRollRain, MTScenePianoRollRainLive

2019-01-28 00:17 Updated by: yknk
Comment

対策5 シーンオブジェクト

MTBackgroundImage::Create

_CreateVertexOfBackground メソッド呼び出し時の引数に OGLDevice を追加。

MTBackgroundImage::_CreateVertexOfBackground

引数に OGLDevice* pOGLDevice を追加。 描画領域の縦横サイズを、メイン画面のビューから取得していたところを、 OGLDevice のビューポートから取得するように変更した。 左目用と右目用の画像をそれぞれ描画するとき、描画領域のサイズはビューポートに指定されるため。

MTPianoKeyboard::_CreateVertexOfKeyBlack

OGLH::Vec3Normalize のインターフェース変更に対応。

対策6 シーンライブラリ

MTFirstPersonCam

一人称カメラクラスに、次のメンバを追加。

  • 右目画像描画用のカメラ位置 m_CamVectorRightEye
  • 左目と右目の距離 m_VRViewEyeSeparation
  • スクリーン種別 m_ScreenType
  • デバイス方向オフセット m_DevDirPhiOffset

MTFirstPersonCam::MTFirstPersonCam

コンストラクタに追加したメンバの初期化処理を追加。

MTFirstPersonCam::GetPositionRightEye

右目用カメラ位置取得メソッドを追加。

MTFirstPersonCam::Transform

カメラ位置設定メソッド _SetCamPosition を呼び出すときの引数を追加。

MTFirstPersonCam::TransformLeftEye

左目用の変換処理メソッドを追加。

MTFirstPersonCam::TransformRightEye

右目用の変換処理メソッドを追加。

MTFirstPersonCam::_SetCamPosition

メソッドの引数にカメラ方向を追加。 メソッド内で、カメラ方向のメンバ変数を直接参照していたところを、 メソッドの引数に指定された方向を利用するように修正し、メソッドを汎用化した。

MTFirstPersonCam::_LoadConfFile

シーンごとの設定ファイルから左目と右目の距離を取得する処理を追加。

MTFirstPersonCam::SetScreenType

スクリーン種別設定メソッドを追加。

MTFirstPersonCam::SetDeviceDirection

デバイス報告設定メソッドを追加。デバイス方向を受け取り、カメラの方向に変換する。

2019-01-28 00:18 Updated by: yknk
Comment

対策7 OpenGL ユーティリティ

OGLCamera::Transform

ビューポート設定時に、原点座標の指定でretina対応(スケール対応)する。 VRビュー(二眼)で右目用の描画をするとき、原点が画面中央に移動するため。

OGLCamera::_gluLookAt

OGLHのI/F変更に合わせて式を書き換える。

OGLDirLight::SetDirection

OGLHのI/F変更に合わせて式を書き換える。

OGLH.h

円周率の define OGL_MATH_PI を OGLH.mm から移動。

OGLH::Vec3Normalize

結果を戻り値で返すようにI/F修正。

OGLH::Vec3Dot

結果を戻り値で返すようにI/F修正。

OGLH::Vec3Cross

結果を戻り値で返すようにI/F修正。

OGLH::ToDegree

ラジアンから角度の変換メソッドを追加。

OGLH::Sign

符号確認メソッドを追加。

OGLRenderer

メンバにビューのポインタ m_pView を追加。

OGLRenderer::OGLRenderer

コンストラクタにメンバの初期化処理を追加。

OGLRenderer::Initializel

引数で渡されたビューをメンバに保持する処理を追加。

OGLRenderer::RenderScene

引数にVRビュー(二眼)フラグを追加。 VRビュー(二眼)の場合は、左目用と右目用の2回の描画処理を実行するように修正。

OGLScene

enum にカメラ種別 CameraType を追加。

OGLScene::Draw

引数にカメラ種別を追加。

OGLTypes.h

クォータニオンの構造体 OGLQuaternion を追加。

OGLVECTOR2

演算子*と演算子/を追加。

OGLVECTOR3

演算子*と演算子/を追加。

対策8 シーン設定ファイル

Resources/conf/*.ini

シーン設定ファイルに左目と右目の距離を追加。

[FirstPersonCam]
VRViewEyeSeparation=0.5

2019-01-31 23:39 Updated by: yknk
  • Status Update from Open to Closed
  • Resolution Update from None to Fixed

Attachment File List

No attachments

Edit

Please login to add comment to this ticket » Login