本APIは、Android標準SurfaceViewに対して、3D立体視コンテンツを表示できるように機能追加しています。
SurfaceViewの拡張クラス(GLSurfaceView, VideoViewなど)に対しても3D立体視コンテンツを表示する機能を提供します。
また、携帯電話の設定メニュー[3D表示の飛び出し度]情報が取得でき、ユーザ設定に応じた表示が実現可能になります。
3D立体視の画像形式は、Side-by-Side(Half)のデータを描画する必要があります。
Side-by-Side(Half)とは、左右両眼用の画像を横幅1/2に圧縮したものを横に並べて1枚のフレームを形成し、再生時に伸長することにより3D立体視映像となります。
左側が左目用、右側が右目用の画像になります。
SidebySide(Half)データを準備する場合、どのような手法があるか例を記載します。
(静止画、動画、OpenGLなどにつかえる例であり、特に制限するものではありません。)
a) SidebySide(Half)データを準備し、画面サイズにあわせて拡大・縮小等を行い、描画する。
b) 右目用と左目用の画像をそれぞれ準備しておき、画面サイズに対して横幅1/2にリサイズし並べて描画する。
c) 1枚の画像を横幅1/2に縮小し、視差を出すために少しずらして並べて描画する。
(気をつける点)
センタリングする場合、全画面に対して行うと、期待する画像が表示されません。
右図のようにSidebySide(Half)を対して行います。
2D/3D切替は複数のSurfaceViewに対して別々に行うことができます。
例えば、2D表示のListViewと3D表示のVideoViewを重ね合せて使うこともできます。
但し、1つ以上のSurfaceViewに対して3D切替を行うと液晶画面が3D状態になるため、2D表示しているListViewの横-解像度が1/2になり、小さいFontなど見えづらくなる可能性があります。
2D/3D切替を行う場合、2D用と3D用でSurfaceViewをそれぞれ用意すると、切り替えがスムーズになります。
設定メニューからユーザの好みに合わせた3D飛び出し度を設定することができます。
[ランチャー]->[設定]->[サウンド&画像設定] /[表示]->[3D表示の飛び出し度]
この設定は、3D Game、MediaPlayerや、PictureViewなど3D立体視に対応したアプリケーション共通で参照しています。
プリインストールアプリケーション以外からも、この設定の値を取得できるようParallaxクラスのI/Fを公開しているので、自作アプリの起動時/再開時/縦横切替時に、3D飛び出し度設定情報を取得し、表示する際に反映するようにしてください。
パッケージ名 | クラス名 | 備考 |
---|---|---|
jp.co.sharp.android.stereo3dlcd | SurfaceController | 3D立体視表示の設定を行う |
Parallax | 3D立体視表示の飛び出し度を取得する |
3D立体視表示を含むパッケージを使うため、Manifestに下記<uses-library>を記載する必要があります。
<uses-library>を設定することにより、3D機能に対応した弊社端末以外でGoogle Playにアクセスした場合に表示されないようになります。
<uses-library android:name="jp.co.sharp.android.stereo3dlcd"/>
例1)
SurfaceViewを制御するクラスSurfaceControllerを作成し、そのメソッドsetStereoViewをコールします。
SurfaceControllerのコンストラクタにて制御するSurfaceViewを設定してください。
パラメータがtrueの場合、3D立体視表示になります。
Falseの場合、2D表示になります。
パッケージ名: | jp.co.sharp.android.stereo3dlcd | |
クラス名: | SurfaceController | |
コンストラクタ: | SurfaceController(SurfaceView surface) | |
メソッド: | public void setStereoView (boolean flag) | |
引数: | flag | true: 3D表示有効 false: 3D表示無効 |
SidebySide(Half)を描画する方法については、特に制限はありません。
下記のようにクリップをして描画することで実現できます。
OpenGLを使う場合、glViewportで描画範囲を設定することも可能です。
例3)
飛び出し度設定について
下記I/Fにより3D飛び出し度設定の値が取得可能です。
この値は、[ランチャー]->[設定]->[サウンド&画像設定]/[表示]->[3D表示の飛び出し度]に対応した設定の値になります。
パッケージ名: | jp.co.sharp.android.stereo3dlcd |
クラス名: | Parallax |
メソッド: | public float get3dDepthSettingsFl() |
・強(default) ⇒ | 1.00f |
・中 ⇒ | 0.66f |
・弱 ⇒ | 0.33f |
・微弱 ⇒ | 0.00f |
Android標準のSurfaceHolder#setFormat/setFixedSize/setSizeFromLayoutと同様にSurfaceController#setStereoViewの呼び出しは、SurfaceViewのWindowを動かすスレッドでコールする必要があります。
例えば、GLSurfaceView.RendererのonSurfaceCreated()、onSurfaceChanged()などからは呼び出さないでください。