com.nttdocomo.ui.graphics3d.collision
クラス ViewVolume

Object
  拡張com.nttdocomo.ui.graphics3d.collision.ViewVolume

public class ViewVolume
extends Object

視錐台におけるBoundingVolumeの可視判定を行うクラスです。

一次変換等の計算の結果、形状のいずれかの長さが0になって形状の次元数がさがる (例えば、Boxが平面になる等)場合の可視判定結果は保証されません。

導入されたバージョン:
DoJa-5.0 (903i)

コンストラクタの概要
ViewVolume()
           ViewVolumeオブジェクトを生成します。
 
メソッドの概要
 boolean isViewable(BoundingVolume bv)
           BoundingVolumeオブジェクトの可視判定をします。
 boolean isViewable(BVFigure bvFig)
           BVFigureオブジェクトの可視判定をします。
 void setParallelView(int width, int height)
           投影面の幅と高さを指定して平行投影の視錐台のサイズを設定します。
 void setPerspectiveView(float near, float far, float angle)
           視野角を指定して透視投影の視錐台のサイズを設定します。
 void setPerspectiveView(float near, float far, int width, int height)
           ニアクリップ面における投影面の幅および高さを指定して、透視投影の視錐台のサイズを設定します。
 void setTransform(Transform trans)
           ワールド座標系に対して視錐台をセットする際の一次変換行列を設定します。
 
クラス Object から継承したメソッド
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

ViewVolume

public ViewVolume()

ViewVolumeオブジェクトを生成します。
生成後、isViewableメソッドを実行する前に、 setParallelViewメソッドまたはsetPerspectiveView メソッドにより、視錐台のサイズを設定してください。

メソッドの詳細

setParallelView

public void setParallelView(int width,
                            int height)

投影面の幅と高さを指定して平行投影の視錐台のサイズを設定します。

平行投影時には、ニアクリップ面の距離は0に、ファークリップ面の距離は 32767の固定となります。

パラメータ:
width - 投影面の幅を指定します。
height - 投影面の高さを指定します。
例外:
IllegalArgumentException - 引数 width, height のいずれかが 0 以下の場合に発生します。

setPerspectiveView

public void setPerspectiveView(float near,
                               float far,
                               int width,
                               int height)

ニアクリップ面における投影面の幅および高さを指定して、透視投影の視錐台のサイズを設定します。

パラメータ:
near - Near平面のZ座標を指定します。
far - Far平面のZ座標を指定します。
width - Near平面における投影面の幅を指定します。
height - Near平面における投影面の高さを指定します。
例外:
IllegalArgumentException - 引数 width, height のいずれかが 0 以下の場合に発生します。
IllegalArgumentException - 引数 near, far が、0 < near < far < 32768 を満たしていない場合に発生します。

setPerspectiveView

public void setPerspectiveView(float near,
                               float far,
                               float angle)

視野角を指定して透視投影の視錐台のサイズを設定します。

パラメータ:
near - Near平面のZ座標を指定します。
far - Far平面のZ座標を指定します。
angle - 視野角(degree)を指定します。 有効範囲は、0度 < 視野角 < 180度です。
例外:
IllegalArgumentException - 引数 angle が 0 以下または 180 以上の場合に発生します。
IllegalArgumentException - 引数 near, far が、0 < near < far < 32768 を満たしていない場合に発生します。

isViewable

public boolean isViewable(BoundingVolume bv)

BoundingVolumeオブジェクトの可視判定をします。

BoundingVolumeオブジェクトの一部が視錐台の内側にあれば、可視状態にあると判定します。

パラメータ:
bv - BoundingVolumeオブジェクトを指定します。
戻り値:
引数bvの一部が視錐台の内側にあればtrueを返します。 引数bvの全体が外側にあればfalseを返します。
例外:
UIException - setParallelViewメソッドまたはsetPerspectiveViewメソッドにより、視錐台のサイズが 設定されていない場合に発生します。(ILLEGAL_STATE)。
NullPointerException - 引数bvがnullの場合に発生します。

isViewable

public boolean isViewable(BVFigure bvFig)

BVFigureオブジェクトの可視判定をします。

BVFigureオブジェクトにセットされている、Figure全体のBoundingVolumeオブジェクトの一部 が視錐台の内側にあれば、可視状態にあると判定します。
BVFigureオブジェクトに、Figure全体のBoundingVolumeオブジェクトがセットされていない場合は、 falseを返します。

パラメータ:
bvFig - BVFigureオブジェクトを指定します。
戻り値:
引数bvFigにセットされている、Figure全体のBoundingVolumeオブジェクトの一部 が視錐台の内側にあればtrueを返します。 BoundingVolumeオブジェクトの全体が外側にあればfalseを返します。
例外:
UIException - setParallelViewメソッドまたはsetPerspectiveViewメソッドにより、視錐台のサイズが 設定されていない場合に発生します。(ILLEGAL_STATE)。
NullPointerException - 引数bvFigがnullの場合に発生します。

setTransform

public void setTransform(Transform trans)

ワールド座標系に対して視錐台をセットする際の一次変換行列を設定します。

初期値は単位行列で、視錐台のローカル座標系がワールド座標系 と一致します。

設定する行列の3×3部分が直交行列となり、全方向同一スケールとなるように指定してください。 そうでない場合の可視判定は保証されません。

パラメータ:
trans - ワールド座標系に対して視錐台をセットする際の一次変換行列を設定します。 nullを設定すると単位行列として扱われ、視錐台のローカル座標系がワールド座標系と一致します。
例外:
IllegalArgumentException - 引数transの1〜3列の列ベクトルに零ベクトルがある場合に発生します。