• 検索結果がありません。

第 9 章 待ち受けアプリケーション

12.2 赤外線リモコンAPI

13.1.2 衝突判定機能

DoJa-5.0 プロファイルにて、前項に記載した 3D グラフィックス描画機能と併用して 3D 空間上で

の物体の衝突判定を行うための com.nttdocomo.ui.graphics3d.collision パッケージが新 設されました。

前項に記載した DrawableObject3D クラスでも衝突判定の機能(isCross()メソッド)が用意 されていますが、そちらの機能では複雑なポリゴン構成を持つ 3D オブジェクトでも各ポリゴン単 位で厳密に衝突判定を行うため、複雑な 3D オブジェクトを高速に処理するには適さない場合があ ります。本項で解説する衝突判定機能では、実際の 3D オブジェクトよりも簡略化されたシンプル な図形を用いて衝突判定を行うため、精度は DrawableObject3D.isCross()メソッドに劣りま すが高速に判定を行うことができます。処理速度を重視するコンテンツでは、

DrawableObject3D.isCross()メソッドではなく本項に解説する衝突判定機能を使用するこ とを推奨します。

衝突判定機能を構成する、 com.nttdocomo.ui.graphics3d.collision パッケージのクラス、

インタフェース群を以下に示します。

各クラス、インタフェースの機能概要は以下の通りです。

<<インタフェース>>

Shape

<<インタフェース>>

BoundingVolume

<<インタフェース>>

AxisAlignedBV

<<インタフェース>>

CollisionObserver

Collision

IntersectionAttribute

BVBuilder

BVFigure

ViewVolume AbstractShape

{abstract}

AbstractBV {abstract}

Triangle

Plane

Point

Line

Ray

Box Capsule Cylinder Sphere

AABBox AABCapsule AABCylinder

Copyright Ⓒ 2008-2012 NTT DOCOMO, Inc. All Rights Reserved.

クラス・インタフェース 機能概要

AABBox ワールド座標軸に平行なBoxを表すクラスです。

AABCapsule ワールド座標の Y 軸に中心軸が平行となるCapsuleを表すクラスです。

AABCylinder ワールド座標の Y 軸に中心軸が平行となるCylinderを表すクラスです。

AbstractBV 形状のうち、立体を表す抽象クラスです。このクラスはBoundingVolumeインタフェース を実装しています。立体形状は、このクラスを継承した具象クラスとして提供されます。

AbstractShape 全ての形状の基底となる抽象クラスであり、Shapeインタフェースを実装しています。非立 体形状は、このクラスを継承した具象クラスとして提供されます。また立体形状は、このク ラスを継承した抽象クラスAbstractBVを継承した具象クラスとして提供されます。

AxisAlignedBV 比較判定で使用される立体の中でも、ワールド座標に平行に配置される特性を持つ立体が実 装するインタフェースです。

BoundingVolume 比較判定で使用される形状のうち、立体が実装するインタフェースです。本インタフェース Shapeインタフェースを継承しています。本パッケージでは、具体的な立体形状として 直方体、円柱、球形、カプセル形をサポートしています。

Box 比較判定で使用される立体のうち、直方体を表すクラスです。

BVBuilder フィギュアから、BVFigureオブジェクトや、BVFigureオブジェクトに貼り付けることの できるBoundingVolumeオブジェクト(BoundingVolumeインタフェースを実装した各 種立体のオブジェクト)を生成するためのクラスです。

BVFigure ボーン構造を持ち、複数のBoundingVolumeで表現されたフィギュアです。通常のフィギ ュア(Figureクラス)ではポリゴンを貼り付けることによって形状を表現しますが、

BVFigureBoundingVolumeを貼り付けることによって形状を表現します。

Capsule 比較判定で使用される立体のうち、カプセル形を表すクラスです。

Collision 衝突判定に関する機能を提供するクラスです。衝突判定、交差判定、距離算出などの機能が

本クラスで提供されます。

CollisionObserver Collisionクラスでの衝突判定の結果、衝突したと判定された場合に、衝突情報とともに 通知を受けるためのオブザーバクラスが実装すべきインタフェースです。通知を受けたいア プリケーションは、このインタフェースを実装したオブザーバクラスのオブジェクトを作成 してCollisionオブジェクトにセットします。

Cylinder 比較判定で使用される立体のうち、円柱を表すクラスです。

IntersectionAttribute FigureRayの交差判定において、交差したと判断された場合にCollisionObserver の通知メソッドに渡される交点情報を表すクラスです。

Line 比較判定で使用される非立体形状のうち、線分を表すクラスです。

Plane 比較判定で使用される非立体形状のうち、無限平面を表すクラスです。

Point 比較判定で使用される非立体形状のうち、点を表すクラスです。

Ray 比較判定で使用される非立体形状のうち、半直線を表すクラスです。

Shape 衝突判定に使用される全ての形状が実装するインタフェースです。このパッケージで提供さ

れる衝突判定はFigure同士を直接比較判定するのではなく、Figureの位置に近似的に配 置されたシンプルな形状同士を比較判定することにより行われます。Shapeインタフェース は、この比較判定で使用される全ての形状で実装されています。

Sphere 比較判定で使用される立体のうち、球を表すクラスです。

Triangle 比較判定で使用される非立体形状のうち、三角形を表すクラスです。

ViewVolume 視錐台(カメラから見た視界)における、BoundingVolumeの可視判定を行う機能を提供 するクラスです。このクラスを使用して非可視と判断されたものは配置上カメラの視界に入 らないため、多くの物体の中から真に描画すべき物体を絞り込むことができます。

Copyright Ⓒ 2008-2012 NTT DOCOMO, Inc. All Rights Reserved.

注意事項:

● 衝突判定機能を活用したiアプリプログラミングの詳細については、株式会社エイチアイより提供されるド キュメント「Micro3D Programming for iアプリ」を参照してください。

13.2 3D サウンド制御機能

本プロファイルでは、携帯電話に搭載されたステレオスピーカーを応用して、左右だけでなく上方 や後方などさまざまな方向から立体的にサウンドが聴こえるような効果を与えることのできる 3D サウンド制御機能を定義しています。この機能を使用することにより、聴者と仮想音源の位置関係

(定位と呼びます)を指定してユーザーに特定の方向から音が聴こえるように感じさせたり、時間 の経過とともに定位を変更して仮想音源が音を出しながら移動しているように感じさせたりする ことができます。

本項では、3D サウンド制御 API の使用方法について解説します。

13.2.1 3D サウンド制御機能のクラス構成

3D サウンド制御機能は、 com.nttdocomo.ui パッケージおよび com.nttdocomo.ui.sound3d パッケージで提供されます。また 3D グラフィックス描画機能と同様、3D に関する数値演算のた めに com.nttdocomo.ui.util3d パッケージで提供されるユーティリティ機能を使用します。

3D サウンド制御機能を構成する、または関連するクラス群を以下に示します。

Copyright Ⓒ 2008-2012 NTT DOCOMO, Inc. All Rights Reserved.

図 24: 3D サウンド制御機能のクラス構成

以下に 3D サウンド制御機能を構成する各クラス、インタフェースの機能概要を示します。

クラス・

インタフェース 機能概要

AudioPresenter オーディオプレゼンタです。3Dサウンド制御ではオーディオプレゼンタが仮想音源に相 当し、各オーディオプレゼンタに対応付けられたコントローラ(Audio3Dオブジェクト)

によって定位(聴者と仮想音源の位置関係)を制御します。本プロファイルでは、

AudioPresenterクラスにはそのプレゼンタに対応するAudio3Dオブジェクトを取り 出すためのgetAudio3D()メソッドが追加されています。

Audio3D 各オーディオプレゼンタ毎に3Dサウンド制御を行うためのコントローラです。Audio3D オブジェクトを使用して3Dサウンド制御の有効/無効を切り替えたり、定位の制御を行 います。iアプリの中でいくつの仮想音源を使用できるか(3Dサウンド制御リソース数)

はメーカーにより異なりますが、どの機種でも利用可能な3Dサウンド制御リソース数は 4つです。iアプリはこの制限の範囲内でAudio3Dオブジェクトを使用することができ ます。

【DoJa-5.0】どの機種でも利用可能な3Dサウンド制御リソース数の規定は、DoJa-5.0 ロファイルで拡大されました。DoJa-4.xプロファイルでは、どの機種でも利用可能な3D サウンド制御リソース数は2つです。

<<インタフェース>>

com.nttdocomo.ui.

MediaPresenter

com.nttdocomo.ui.

AudioPresenter

<<インタフェース>>

com.nttdocomo.ui.

MediaResource

<<インタフェース>>

com.nttdocomo.util.

EventListener

<<インタフェース>>

com.nttdocomo.ui.

MediaSound

<<インタフェース>>

com.nttdocomo.ui.

Audio3DListener

com.nttdocomo.ui.

Audio3D

com.nttdocomo.ui.

MediaManager

<<インタフェース>>

com.nttdocomo.ui.sound3d.

SoundPosition

<<インタフェース>>

com.nttdocomo.ui.

Audio3DLocalization

com.nttdocomo.ui.sound3d.

CartesianPosition

com.nttdocomo.ui.sound3d.

PolarPosition

com.nttdocomo.ui.sound3d.

SoundMotion

com.nttdocomo.ui.sound3d.

CartesianListener

com.nttdocomo.ui.util3d.

FastMath

com.nttdocomo.ui.util3d.

Transform

com.nttdocomo.ui.util3d.

Vector3D

Copyright Ⓒ 2008-2012 NTT DOCOMO, Inc. All Rights Reserved.

MediaSound サウンドデータを表現するメディアデータです。3Dサウンド制御ではiアプリから定位 を指示することで3D制御を行う方法の他に、あらかじめサウンドデータに定位情報を埋 め込んでおき、サウンド再生時にそれを使用して自動的に3D制御を行う方法を取ること もできます。サウンドデータに定位情報を埋め込む場合は1つのサウンドに複数の3D ウンド制御リソースを割り当てることができます。本プロファイルのMediaSoundクラ スでは、対応するサウンドデータに埋め込まれた定位情報にいくつの3Dサウンド制御リ ソースが割り当てられているかを取得する機能が追加されています。

Audio3DLocalization 定位を表すインタフェースです。3Dサウンド制御機能では定位を表現する方法(クラス)

が複数ありますが、どのクラスもこのインタフェースを実装しています。

なお、このインタフェースではメソッドやフィールドは定義されていません。

SoundPosition 聴者の位置と仮想音源の位置によって表される、固定された定位を表すインタフェース です。このインタフェースを実装したクラスでは、聴者の位置と仮想音源の位置を指定 することによって両者の位置関係を表します。

なお、このインタフェースではメソッドやフィールドは定義されていません。

PolarPosition SoundPositionインタフェースを実装するクラスで、極座標系を使用して聴者と仮想 音源の位置関係を表します。極座標系ではその原点に一定の方向を向いた聴者がいるも のとし、そこからの方位角、仰角、距離を指定して仮想音源の位置を表現します。

CartesianPosition SoundPositionインタフェースを実装するクラスで、x軸、y軸、z軸の3軸から構成 されるデカルト座標系を使用して聴者と仮想音源の位置関係を表します。

PolarPositionが常に聴者が原点に存在するローカル座標系と捉えることができるの に対し、CartesianPositionは任意の位置に存在する聴者と仮想音源を包含するいわ ゆるワールド座標系と捉えることができます。ただしCartesianPositionでも最終的 には聴者からみた仮想音源の位置関係が計算され、使用されます。

CartesianListener CartesianPositionクラスで定位を表現する際に、デカルト座標系上に置く聴者を表 現するクラスです。デカルト座標系で定位を表すために必要となる聴者の向きの設定は、

このクラスを使用して行います。

SoundMotion SoundMotionクラスは「移動する定位」を表現するためのクラスです。移動開始から の経過時間とその時点での定位を経路情報として設定することで、その経路に沿って仮 想音源が移動していくようにユーザーに感じさせることができます。

Audio3DListener 3Dサウンド制御に関するイベントをアプリケーションプログラムに通知するためのイベ ントリスナを定義するインタフェースです。本プロファイルでは、SoundMotion(移動 する定位)における移動完了イベントが定義されています。

FastMath 3D関連機能での使用を前提とした高速数値演算ユーティリティです。本プロファイルに 対応する携帯電話ではCLDC-1.1が搭載されており、このバージョンのKVMがサポート する浮動小数点数演算が使用できますが、このクラスでは浮動小数点数演算を内部的に 整数演算に置き換えます。このため、通常の浮動小数点数演算より大きな誤差を含む可 能性はありますが高速に演算を行うことができます。

Transform 3次元アフィン変換用の行列を扱うクラスです。CartesianListenerに聴者の向きを 与える際に、視点座標への変換行列を設定して使用することができます。

Vector3D 3次元ベクトルを表すクラスです。内積・外積計算、正規化といったユーティリティメソ ッドを備えています。座標系上の位置や向きなどを表現するために使用されます。