Objectcom.nttdocomo.ui.graphics3d.Object3D
com.nttdocomo.ui.graphics3d.DrawableObject3D
com.nttdocomo.ui.graphics3d.Primitive
プリミティブ図形群の頂点データなどを保持する、
プリミティブクラスを定義します。
プリミティブオブジェクトは、レンダリング機能のメソッド
プリミティブオブジェクトは、以下のレンダリング用の情報を保持します。
Graphics3D.renderObject3D(DrawableObject3D, Transform)
において、描画対象となるポリゴン等の形状に関する情報を保持します。
各種パラメータは、初期状態では以下のようになります。
パラメータ 初期状態 テクスチャ歪み補正
無効
setPerspectiveCorrectionEnabled(false)
が呼ばれた状態図形用ブレンドモード
無設定 ( DrawableObject3D.BLEND_NORMAL )透明度
100 パーセント(不透明)
プリミティブオブジェクトの
透明度は、設定されている図形用ブレンドモードが
DrawableObject3D.BLEND_ALPHA,
DrawableObject3D.BLEND_ADD
のどちらかのときに有効になります。
このとき、プリミティブの型のすべて
(点・線・三角形・四角形・ポイントスプライト)に該当する図形
の描画について、設定されている透明度は影響を与えます。
プリミティブオブジェクトは、 頂点・法線・色・テクスチャ座標・ポイントスプライト情報を それぞれ配列として格納することができます。 頂点情報を格納することは必須ですが、 それ以外の情報は個別に格納するかどうかを指定できます。
プリミティブオブジェクトに、テクスチャ座標の情報を設定するときには、
一つの
モデル用の
テクスチャ オブジェクトを、
setTexture(Texture) メソッドにより
設定する必要があります。
一つのプリミティブオブジェクトが利用できる
モデル用の
テクスチャ オブジェクトはただ一つです。
初期状態では、テクスチャ オブジェクトは設定されていません。
setTime(int) メソッド呼び出しによって
現在時刻が変更されても、保持しているデータ内容は変化しません。
プリミティブ図形の型ごとの、プリミティブ情報(属性)と配列との対応を 以下の表に示します。 各情報の値の範囲や制限等については、このクラスで定義されている 各プリミティブ情報の配列を扱うメソッドの説明を参照してください。
プリミティブオブジェクトを実際に描画するときは、
Graphics3D.renderObject3D(DrawableObject3D, Transform)
メソッドを利用します。
PRIMITIVE_POINTS )| プリミティブ情報(属性) | パラメータの値 | 配列のフォーマット |
| 頂点 | ---- | プリミティブ一個につき頂点一個を格納します。 頂点一個につき (x, y, z) の順で三個の整数値を格納しますので、 配列の長さはプリミティブ数 x 3 となります。 |
| 法線情報 | ---- | 使用しません。 |
| 色情報 | ||
COLOR_PER_PRIMITIVE |
プリミティブの個数に関わらず、共通に使われる色情報一個を格納します。 色情報一個につきRGB値を表す一個の整数値を格納しますので、配列の長さは常に 1 となります。 | |
COLOR_PER_FACE |
プリミティブ一個につき色情報一個を格納します。 色情報一個につき RGB 値を表す一個の整数値を格納しますので、 配列の長さはプリミティブ数 x 1 となります。 | |
| テクスチャ座標情報 | ---- | 使用しません。 |
| ポイントスプライト情報 | ---- | 使用しません。 |
PRIMITIVE_LINES )| プリミティブ情報(属性) | パラメータの値 | 配列のフォーマット |
| 頂点 | ---- | プリミティブ一個につき頂点二個を格納します。 頂点一個につき (x, y, z) の順で三個の整数値を格納しますので、 配列の長さはプリミティブ数 x 6 となります。 |
| 法線情報 | ---- | 使用しません。 |
| 色情報 | ||
COLOR_PER_PRIMITIVE |
プリミティブの個数に関わらず、共通に使われる色情報一個を格納します。 色情報一個につき RGB 値を表す一個の整数値を格納しますので、配列の長さは常に 1 となります。 | |
COLOR_PER_FACE |
プリミティブ一個につき色情報一個を格納します。 色情報一個につき RGB 値を表す一個の整数値を格納しますので、 配列の長さはプリミティブ数 x 1 となります。 | |
| テクスチャ座標情報 | ---- | 使用しません。 |
| ポイントスプライト情報 | ---- | 使用しません。 |
PRIMITIVE_TRIANGLES )| プリミティブ情報(属性) | パラメータの値 | 配列のフォーマット |
| 頂点 | ---- | プリミティブ一個につき頂点三個を格納します。 頂点一個につき (x, y, z) の順で三個の整数値を格納しますので、 配列の長さはプリミティブ数 x 9 となります。 |
| 法線情報 | NORMAL_NONE |
なし。 |
NORMAL_PER_FACE |
プリミティブ一個につき法線情報一個を格納します。 法線情報一個につき (x, y, z) の順で三個の整数値を格納しますので、 配列の長さはプリミティブ数 x 3 となります。 | |
NORMAL_PER_VERTEX |
プリミティブ一個につき法線情報三個(頂点一個につき法線情報一個)を格納します。 法線情報一個につき (x, y, z) の順で三個の整数値を格納しますので、 配列の長さはプリミティブ数 x 9 となります。 | |
| 色情報 | COLOR_NONE |
なし。 |
COLOR_PER_PRIMITIVE |
プリミティブの個数に関わらず、共通に使われる色情報一個を格納します。 色情報一個につき RGB 値を表す一個の整数値を格納しますので、配列の長さは常に 1 となります。 | |
COLOR_PER_FACE |
プリミティブ一個につき色情報一個を格納します。 色情報一個につき RGB 値を表す一個の整数値を格納しますので、 配列の長さはプリミティブ数 x 1 となります。 | |
| テクスチャ座標情報 | TEXTURE_COORD_NONE |
なし。 |
TEXTURE_COORD_PER_VERTEX |
プリミティブ一個につきテクスチャ座標情報三個 (頂点一個につきテクスチャ座標一個)を格納します。 テクスチャ座標情報一個につき (u, v) の順で二個の整数値を格納しますので、 配列の長さはプリミティブ数 x 6 となります。 | |
| ポイントスプライト情報 | ---- | 使用しません。 |
PRIMITIVE_QUADS )| プリミティブ情報(属性) | パラメータの値 | 配列のフォーマット |
| 頂点 | ---- | プリミティブ一個につき頂点四個を格納します。 頂点一個につき (x, y, z) の順で三個の整数値を格納しますので、 配列の長さはプリミティブ数 x 12 となります。 |
| 法線情報 | NORMAL_NONE |
なし。 |
NORMAL_PER_FACE |
プリミティブ一個につき法線情報一個を格納します。 法線情報一個につき (x, y, z) の順で三個の整数値を格納しますので、 配列の長さはプリミティブ数 x 3 となります。 | |
NORMAL_PER_VERTEX |
プリミティブ一個につき法線情報四個(頂点一個につき法線情報一個)を格納します。 法線情報一個につき (x, y, z) の順で三個の整数値を格納しますので、 配列の長さはプリミティブ数 x 12 となります。 | |
| 色情報 | COLOR_NONE |
なし。 |
COLOR_PER_PRIMITIVE |
プリミティブの個数に関わらず、共通に使われる色情報一個を格納します。 色情報一個につき RGB 値を表す一個の整数値を格納しますので、配列の長さは常に 1 となります。 | |
COLOR_PER_FACE |
プリミティブ一個につき色情報一個を格納します。 色情報一個につき RGB 値を表す一個の整数値を格納しますので、 配列の長さはプリミティブ数 x 1 となります。 | |
| テクスチャ座標情報 | TEXTURE_COORD_NONE |
なし。 |
TEXTURE_COORD_PER_VERTEX |
プリミティブ一個につきテクスチャ座標情報四個 (頂点一個につきテクスチャ座標一個)を格納します。 テクスチャ座標情報一個につき (u, v) の順で二個の整数値を格納しますので、 配列の長さはプリミティブ数 x 8 となります。 | |
| ポイントスプライト情報 | ---- | 使用しません。 |
PRIMITIVE_POINT_SPRITES )| プリミティブ情報(属性) | パラメータの値 | 配列のフォーマット |
| 頂点 | ---- | プリミティブ一個につき頂点一個を格納します。 頂点一個につき (x, y, z) の順で三個の整数値を格納しますので、 配列の長さはプリミティブ数 x 3 となります。 |
| 法線情報 | ---- | 使用しません。 |
| 色情報 | ---- | 使用しません。 |
| テクスチャ座標情報 | ---- | 使用しません。 |
| ポイントスプライト情報 | POINT_SPRITE_PER_PRIMITIVE |
プリミティブの個数に関わらず、共通に使われるプリミティブ情報(属性) 一個を格納します。 ポイントスプライト情報一個につき、 ポイントスプライトの幅・高さ・回転角・ポイントスプライト の左上に対応するテクスチャ位置情報 (u0, v0) ・右下に対応するテクスチャ位置情報 (u1, v1) ・表示フラグの八個の整数値を格納しますので、 配列の長さは常に 8 となります。 |
POINT_SPRITE_PER_VERTEX |
プリミティブ一個につきポイントスプライト情報一個を格納します。 ポイントスプライト情報一個につき、 ポイントスプライトの幅・高さ・回転角・ポイントスプライト の左上に対応するテクスチャ位置情報 (u0, v0) ・右下に対応するテクスチャ位置情報 (u1, v1) ・フラグの八個の整数値を格納しますので、配列の長さはプリミティブ数 x 8 となります。 |
ポリゴンのプリミティブ(三角形・四角形)に関して、特記事項を以下に 示します。
プリミティブ型のうち、ポリゴンではない特殊プリミティブ (点・線・ポイントスプライト)については、以下の制限事項があります。
カラーキーに関して、特記事項を以下に示します。
| フィールドの概要 | |
static int |
COLOR_NONE
プリミティブが色情報を持たないことを表します(=0)。 |
static int |
COLOR_PER_FACE
プリミティブが面単位で色情報を持つことを表します (=0x0800)。 |
static int |
COLOR_PER_PRIMITIVE
プリミティブが 同じ色情報を持つことを表します (=0x0400)。 |
static int |
NORMAL_NONE
プリミティブが法線情報を持たないことを表します (=0)。 |
static int |
NORMAL_PER_FACE
プリミティブが面単位で法線情報を持つことを表します (=0x0200)。 |
static int |
NORMAL_PER_VERTEX
プリミティブが頂点単位で法線情報を持つことを表します (=0x0300)。 |
static int |
POINT_SPRITE_FLAG_LOCAL_SIZE
モデル座標系でのサイズを指定することを表す ポイントスプライトフラグです(=0)。 |
static int |
POINT_SPRITE_FLAG_NO_PERSPECTIVE
パースを無効にすることを表すポイントスプライトフラグです(=2)。 |
static int |
POINT_SPRITE_FLAG_PERSPECTIVE
パースを有効にすることを表すポイントスプライトフラグです(=0)。 |
static int |
POINT_SPRITE_FLAG_PIXEL_SIZE
スクリーン座標系でのサイズを指定することを表す ポイントスプライトフラグです(=1)。 |
static int |
POINT_SPRITE_PER_PRIMITIVE
プリミティブが 同じポイントスプライト情報を持つことを表します (=0x1000)。 |
static int |
POINT_SPRITE_PER_VERTEX
プリミティブが頂点単位でポイントスプライト情報を持つことを表します (=0x3000)。 |
static int |
PRIMITIVE_LINES
線の描画を表すプリミティブの型です(=2)。 |
static int |
PRIMITIVE_POINT_SPRITES
ポイントスプライトの描画を表すプリミティブの型です(=5)。 |
static int |
PRIMITIVE_POINTS
点の描画を表すプリミティブの型です(=1)。 |
static int |
PRIMITIVE_QUADS
四角形の描画を表すプリミティブの型です(=4)。 |
static int |
PRIMITIVE_TRIANGLES
三角形の描画を表すプリミティブの型です(=3)。 |
static int |
TEXTURE_COLORKEY
プリミティブに設定したテクスチャの透過色を有効にすることを表すフラグです (=0x0010)。 |
static int |
TEXTURE_COORD_NONE
プリミティブがテクスチャ座標情報を持たないことを表します(=0)。 |
static int |
TEXTURE_COORD_PER_VERTEX
プリミティブが頂点単位でテクスチャ座標情報を持つことを表します (=0x3000)。 |
| クラス com.nttdocomo.ui.graphics3d.DrawableObject3D から継承したフィールド |
BLEND_ADD, BLEND_ALPHA, BLEND_NORMAL |
| クラス com.nttdocomo.ui.graphics3d.Object3D から継承したフィールド |
TYPE_ACTION_TABLE, TYPE_FIGURE, TYPE_FOG, TYPE_GROUP, TYPE_GROUP_MESH, TYPE_LIGHT, TYPE_NONE, TYPE_PRIMITIVE, TYPE_TEXTURE |
| コンストラクタの概要 | |
Primitive(int type,
int param,
int n)
プリミティブオブジェクトを生成します。 |
|
| メソッドの概要 | |
static int |
convertAngle(float degree)
角度(degree)を示す float 値を、 4096 分周円表現の整数値に変換します。 |
static float |
convertAngle(int angle)
4096 分周円表現の整数値を、角度(degree)を示す float 値に変換します。 |
int[] |
getColorArray()
格納されている色情報の配列を取得します。 |
int[] |
getNormalArray()
格納されている法線情報の配列を取得します。 |
int[] |
getPointSpriteArray()
格納されているポイントスプライト情報の配列を取得します。 |
int |
getPrimitiveParam()
格納されているプリミティブ情報(属性)を取得します。 |
int |
getPrimitiveType()
格納されているプリミティブ図形の型を取得します。 |
int[] |
getTextureCoordArray()
格納されているテクスチャ座標情報の配列を取得します。 |
int[] |
getVertexArray()
格納されている頂点情報の配列を取得します。 |
static void |
normalize(int[] ary,
int index)
int 配列内の三つの要素を三次元ベクトルとみなし、 正規化(単位ベクトル化)します。 |
void |
setBlendMode(int mode)
図形用ブレンドモードを設定します。 |
void |
setPerspectiveCorrectionEnabled(boolean isOn)
パースペクティブコレクション(テクスチャの歪み補正)の有効化/無効化を設定します。 |
void |
setTexture(Texture texture)
モデル用の テクスチャ オブジェクトを設定します。
|
void |
setTransparency(float v)
透明度をパーセントで設定します。 |
int |
size()
格納されているプリミティブの数を取得します。 |
| クラス com.nttdocomo.ui.graphics3d.DrawableObject3D から継承したメソッド |
isCross |
| クラス com.nttdocomo.ui.graphics3d.Object3D から継承したメソッド |
createInstance, createInstance, dispose, getTime, getType, setTime |
| クラス Object から継承したメソッド |
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| フィールドの詳細 |
public static final int PRIMITIVE_POINTS
点の描画を表すプリミティブの型です(=1)。
点のプリミティブの描画では、頂点と色の情報と、プリミティブ属性の設定が反映されます。
public static final int PRIMITIVE_LINES
線の描画を表すプリミティブの型です(=2)。
線のプリミティブの描画では、頂点と色の情報と、プリミティブ属性の設定が反映されます。
public static final int PRIMITIVE_TRIANGLES
三角形の描画を表すプリミティブの型です(=3)。
三角形のプリミティブの描画では、頂点と法線(光源対応処理を行う場合)と、 色またはテクスチャ座標の情報と、プリミティブ属性の設定が反映されます。 色情報とテクスチャ座標情報とを同時に指定することはできません。
public static final int PRIMITIVE_QUADS
四角形の描画を表すプリミティブの型です(=4)。
四角形のプリミティブの描画では、頂点と法線(光源対応処理を行う場合)と、 色またはテクスチャ座標の情報と、プリミティブ属性の設定が反映されます。 色情報とテクスチャ座標情報とを同時に指定することはできません。
なお、四角形の頂点は、同一平面上にあり、 凸状の四角形を構成していなければなりません。 頂点が同一平面上になかったり、凸状の四角形ではなかったりした場合の レンダリング結果は機種依存です。
public static final int PRIMITIVE_POINT_SPRITES
ポイントスプライトの描画を表すプリミティブの型です(=5)。
ポイントスプライトのプリミティブの描画では、頂点とポイントスプライトの情報と、 プリミティブ属性の設定が反映されます。
public static final int NORMAL_NONE
プリミティブが法線情報を持たないことを表します (=0)。
public static final int NORMAL_PER_FACE
プリミティブが面単位で法線情報を持つことを表します (=0x0200)。
public static final int NORMAL_PER_VERTEX
プリミティブが頂点単位で法線情報を持つことを表します (=0x0300)。
public static final int COLOR_NONE
プリミティブが色情報を持たないことを表します(=0)。
public static final int COLOR_PER_PRIMITIVE
プリミティブが 同じ色情報を持つことを表します (=0x0400)。
public static final int COLOR_PER_FACE
プリミティブが面単位で色情報を持つことを表します (=0x0800)。
public static final int TEXTURE_COORD_NONE
プリミティブがテクスチャ座標情報を持たないことを表します(=0)。
public static final int TEXTURE_COORD_PER_VERTEX
プリミティブが頂点単位でテクスチャ座標情報を持つことを表します (=0x3000)。
public static final int TEXTURE_COLORKEY
プリミティブに設定したテクスチャの透過色を有効にすることを表すフラグです (=0x0010)。
テクスチャにおいて色番号 0 の部分が抜き色としてレンダリングされます。
public static final int POINT_SPRITE_PER_PRIMITIVE
プリミティブが 同じポイントスプライト情報を持つことを表します (=0x1000)。
public static final int POINT_SPRITE_PER_VERTEX
プリミティブが頂点単位でポイントスプライト情報を持つことを表します (=0x3000)。
public static final int POINT_SPRITE_FLAG_LOCAL_SIZE
モデル座標系でのサイズを指定することを表す ポイントスプライトフラグです(=0)。
ポイントスプライト情報の幅と高さは、モデル座標系での幅と高さであるとみなされます。 すなわち、モデル座標系の指定された頂点位置に指定された幅と高さのポイントスプライト があるとしてレンダリングが行われます。
POINT_SPRITE_FLAG_PIXEL_SIZE
と同時に指定することはできません。
public static final int POINT_SPRITE_FLAG_PIXEL_SIZE
スクリーン座標系でのサイズを指定することを表す ポイントスプライトフラグです(=1)。
ポイントスプライト情報の幅と高さは、 スクリーン座標系での幅と高さであるとみなされます。 すなわち、モデル座標系の指定された頂点位置をスクリーンにマップした位置に、 指定された幅と高さでポイントスプライトのレンダリングが行われます。
POINT_SPRITE_FLAG_LOCAL_SIZE
と同時に指定することはできません。
public static final int POINT_SPRITE_FLAG_PERSPECTIVE
パースを有効にすることを表すポイントスプライトフラグです(=0)。
透視投影に設定されている場合のみ有効で、 平行投影に設定されている場合は無視されます。
ポイントスプライトフラグを
( POINT_SPRITE_FLAG_PIXEL_SIZE |
POINT_SPRITE_FLAG_PERSPECTIVE )
とした場合は、ポイントスプライトがニアクリップ面上にあるときに
指定された幅と高さになるようにパースをつけてレンダリングされます。
POINT_SPRITE_FLAG_NO_PERSPECTIVE
と同時に指定することはできません。
public static final int POINT_SPRITE_FLAG_NO_PERSPECTIVE
パースを無効にすることを表すポイントスプライトフラグです(=2)。
透視投影に設定されている場合のみ有効で、 平行投影に設定されている場合は無視されます。
ポイントスプライトフラグを
( POINT_SPRITE_FLAG_LOCAL_SIZE |
POINT_SPRITE_FLAG_NO_PERSPECTIVE )
とした場合にどのようにレンダリングされるかは機種依存です。
POINT_SPRITE_FLAG_PERSPECTIVE
と同時に指定することはできません。
| コンストラクタの詳細 |
public Primitive(int type,
int param,
int n)
プリミティブオブジェクトを生成します。
プリミティブ図形の型と、格納する情報の種類と、図形の数を指定する
必要があります。
指定された情報群に対応する、情報格納用の配列が
それぞれ生成されます。ただし、頂点情報用の配列は、常に生成されます。
この配列には、
getVertexArray()
getNormalArray()
getColorArray()
getTextureCoordArray()
getPointSpriteArray()
のメソッドの戻り値を用いることでアクセスできます。
プリミティブの図形の型には、
PRIMITIVE_POINTS,
PRIMITIVE_LINES,
PRIMITIVE_TRIANGLES,
PRIMITIVE_QUADS,
PRIMITIVE_POINT_SPRITES
のいずれかを指定します。
情報の種類のうち、頂点情報は必携であるため指定する必要はありません。
頂点・法線・色・テクスチャ座標・ポイントスプライト情報については、
格納するかどうかを個別に指定可能です。
ただし、色情報とテクスチャ座標情報とを同時に指定することはできません。
プリミティブ情報(属性)には、
NORMAL_NONE,
NORMAL_PER_FACE,
NORMAL_PER_VERTEX,
COLOR_NONE,
COLOR_PER_PRIMITIVE,
COLOR_PER_FACE,
TEXTURE_COLORKEY,
TEXTURE_COORD_NONE,
TEXTURE_COORD_PER_VERTEX,
POINT_SPRITE_PER_PRIMITIVE,
POINT_SPRITE_PER_VERTEX
を論理和で組み合わせて指定します。
このコンストラクタ によって作成されたプリミティブオブジェクトには、 255 個までのプリミティブ図形を、 格納することができます。
生成直後は 各種の情報格納用の配列 の全成分が 0 に初期化されています。
type - プリミティブ図形の型を指定します。param - プリミティブ情報(属性)を指定します。n - プリミティブ図形の数を指定します。
IllegalArgumentException - 引数 n が 0 以下の場合、または 256 以上の場合に発生します。
IllegalArgumentException - 引数 type に不正な値が指定された
場合に発生します。
IllegalArgumentException - 引数 type に対して、引数 param に不正な組み合わせが指定された場合に発生します。
| メソッドの詳細 |
public int getPrimitiveType()
格納されているプリミティブ図形の型を取得します。
UIException - 既に dispose() されたオブジェクトに対して呼ばれた場合に発生します
(ILLEGAL_STATE)。
public int getPrimitiveParam()
格納されているプリミティブ情報(属性)を取得します。
UIException - 既に dispose() されたオブジェクトに対して呼ばれた場合に発生します
(ILLEGAL_STATE)。
public int size()
格納されているプリミティブの数を取得します。
UIException - 既に dispose() されたオブジェクトに対して呼ばれた場合に発生します
(ILLEGAL_STATE)。
public int[] getVertexArray()
格納されている頂点情報の配列を取得します。
頂点情報配列は、{x0, y0, z0, x1, y1, z1, …} という順番で頂点座標が格納された int 型の配列です。
頂点情報には、モデル座標系での位置を指定します。 値を指定するときに、整数の精度では足りない場合には、 モデルを大きくする、つまり、 値にある程度の倍数を掛けて近似することで、値同士の比を構成してください。 この場合、描画時には、掛けた倍数値だけ縮小する必要があります。
この配列の値を読み書きすることで、本オブジェクトのデータ内容を 直接に参照および変更できます。
頂点情報の xi, yi, zi の値は、 -32768 以上かつ 32767 以下でなければなりません。
float 値による頂点情報を int 値に変換するときには、
FastMath.floatToInnerInt(float)
メソッドを利用すると便利です。
たとえば float 値 1.0 をこのメソッドに与えると、 int 値 4096 を
取得できます。この値は 4096 倍されていますので、
float 値と int 値との単位を同じと定義されるのであれば、
int 値を 1/4096 倍 (たとえば 12 回右シフト演算)することで、
所望の値 1 を得ることができます。
UIException - 既に dispose() されたオブジェクトに対して呼ばれた場合に発生します
(ILLEGAL_STATE)。
public int[] getNormalArray()
格納されている法線情報の配列を取得します。
法線情報配列は、{x0, y0, z0, x1, y1, z1, …} という順番で法線情報が格納された int 型の配列です。
法線情報には、法線ベクトルの向きを指定します。
sqrt(x * x + y * y + z * z)
の値が、4096 になるようにしてください。
この配列の値を読み書きすることで、 プリミティブ配列が持つプリミティブ情報に直接アクセスすることができます。
法線情報の xi, yi, zi の値は、ベクトルの長さが
4096 に正規化されていなければなりません。
ベクトルの長さが 4096 に正規化されていない場合のレンダリング結果は機種依存です。
なお、int 値の情報から動的にベクトル値を生成するときには、
normalize(int[], int) メソッド
を用いるのが便利です。
float 値による情報から、動的にベクトル値を生成するときには、
Vector3D.normalize() メソッドと
FastMath.floatToInnerInt(float)
メソッドを併用すると便利です。
具体的には、 Vector3D オブジェクトに float 値を設定しておき、
Vector3D.normalize() メソッドを呼び出します。
このメソッドによる演算は、単位ベクトルの長さが
1.0 となるように行われます。
この演算後、メソッド Vector3D.getX() , Vector3D.getY() ,
Vector3D.getX() によって float 値 3 つによる結果を取得できます。
このとき、取得した 3 つの値をそれぞれ、
メソッド
FastMath.floatToInnerInt(float)
によって変換すると、
その結果は 4096 に正規化された int 値 3 つになります。
この int 値 3 つは、配列の要素用の法線情報としてそのまま利用できます。
UIException - 既に dispose() されたオブジェクトに対して呼ばれた場合に発生します
(ILLEGAL_STATE)。
public int[] getColorArray()
格納されている色情報の配列を取得します。
色情報配列は、{((r0 <<16) | (g0 << 8) | (b0)), ((r1 <<16) | (g1 << 8) | (b1)), …} という順番で色情報が格納された int 型の配列です。
各要素の上位 8 ビットの内容は無視されます。 この配列の値を読み書きすることで、 プリミティブ配列が持つプリミティブ情報に直接アクセスすることができます。
UIException - 既に dispose() されたオブジェクトに対して呼ばれた場合に発生します
(ILLEGAL_STATE)。
public int[] getTextureCoordArray()
格納されているテクスチャ座標情報の配列を取得します。
テクスチャ座標情報配列は、{u0, v0, u1, v1, …} という順番でテクスチャ座標情報が格納された int 型の配列です。 テクスチャ座標情報には、テクスチャ画像上のピクセル座標を指定します。 テクスチャ座標情報の ui, vi の値は、 0 以上で、テクスチャのイメージの幅および高さより小さくなければなりません。
この配列の値を読み書きすることで、 プリミティブ配列が持つプリミティブ情報に直接アクセスすることができます。
この範囲外の値を指定したときの動作は、機種依存です。
UIException - 既に dispose() されたオブジェクトに対して呼ばれた場合に発生します
(ILLEGAL_STATE)。
public int[] getPointSpriteArray()
格納されているポイントスプライト情報の配列を取得します。
ポイントスプライト情報配列は、 {w0, h0, angle0, u00, v00, u10, v10, flag0, w1, h1, angle1, u01, v01, u11, v11, flag1, …} という順番でポイントスプライト情報が格納された int 型の配列です。 w は幅、 h は高さ、 angle は回転角度、 u2n, v2n, u2n+1, v2n+1 はテクスチャ画像の座標、 flag は ポイントスプライトフラグを意味します。 テクスチャ画像の座標とは、テクスチャ画像上のピクセル座標です。 u2n, v2n により左上端の x, y 座標を、 u2n+1, v2n+1 により右下端の x, y 座標を、 それぞれ指定します。
この配列の値を読み書きすることで、 プリミティブ配列が持つプリミティブ情報に直接アクセスすることができます。
幅と高さの値は、ポイントスプライトフラグに
POINT_SPRITE_FLAG_LOCAL_SIZE
が指定されているときはモデル座標系での幅と高さを、
ポイントスプライトフラグに
POINT_SPRITE_FLAG_PIXEL_SIZE
が指定されているときはスクリーン座標系での幅と高さを意味します。
float 値による幅および高さの情報を int 値に変換するときには、
FastMath.floatToInnerInt(float)
メソッドを利用すると便利です。
たとえば float 値 1.0 をこのメソッドに与えると、 int 値 4096 を
取得できます。この値は 4096 倍されていますので、
float 値と int 値との単位を同じと定義されるのであれば、
int 値を 1/4096 倍 (たとえば 12 回右シフト演算)することで、
所望の値 1 を得ることができます。
ポイントスプライト情報の anglei の値は、4096 分周円表現で、
時計回りの回転角を指定します。
実際には (anglei & 0x0fff) の値が回転角として使用されます。
なお、動的に角度値を生成するときには、
convertAngle(float) メソッドおよび
convertAngle(int) メソッド
を用いるのが便利です。
u0i,
v0i, u1i, v1i の値は、 0
以上で、テクスチャのイメージの幅および高さより小さくなければなりません。
この範囲外の値を指定したときの動作は、機種依存です。
flagi の値は、
POINT_SPRITE_FLAG_LOCAL_SIZE,
POINT_SPRITE_FLAG_PIXEL_SIZE,
POINT_SPRITE_FLAG_PERSPECTIVE,
POINT_SPRITE_FLAG_NO_PERSPECTIVE
を論理和で組み合わせて指定します。
UIException - 既に dispose() されたオブジェクトに対して呼ばれた場合に発生します
(ILLEGAL_STATE)。
public static void normalize(int[] ary,
int index)
int 配列内の三つの要素を三次元ベクトルとみなし、 正規化(単位ベクトル化)します。
ary[index] を x 要素、 ary[index+1] を y 要素、 ary[index+2] を z 要素とみなして正規化を行います。 単位ベクトルの長さは 4096 です。 演算結果によって配列内の該当要素の値が上書きされます。
ary - int 配列を指定します。index - 先頭の要素の番号を指定します。
NullPointerException - 引数 ary が null の場合に発生します。
IllegalArgumentException - 引数 index に 3 を足した値が 引数 ary の長さより大きい場合に発生します。
ArithmeticException - ベクトルが零ベクトルの場合に発生します。
public static int convertAngle(float degree)
角度(degree)を示す float 値を、 4096 分周円表現の整数値に変換します。
引数 degree の符号は有効として扱われます。 たとえば、引数 degree が -1.0 のときと、 359.0 のときの結果は同じです。
引数 degree に、 Float.NaN, Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY のいずれかが指定された場合、値 0 とみなされます。
結果は、0 以上 4095 以下の値になります。
degree - float 値を指定します。
public static float convertAngle(int angle)
4096 分周円表現の整数値を、角度(degree)を示す float 値に変換します。
引数 angle の符号は有効として扱われます。 たとえば、引数 angle が -1 のときと、 4095 のときの結果は同じです。
結果は、0.0 以上 360.0 未満の値になります。
angle - int 値を指定します。
public void setTexture(Texture texture)
モデル用の
テクスチャ オブジェクトを設定します。
texture - テクスチャ オブジェクトを指定します。
UIException - 既に dispose() されたオブジェクトに対して呼ばれた場合に発生します
(ILLEGAL_STATE)。
NullPointerException - 引数 texture が null の場合に発生します。
IllegalArgumentException - コンストラクト時、 TEXTURE_COORD_NONE
がプリミティブ情報(属性)に指定されていた場合に発生します。
IllegalArgumentException - コンストラクト時、
PRIMITIVE_POINTS あるいは
PRIMITIVE_LINES
がプリミティブ図形の型に指定されていた場合に発生します。
UIException - 引数 texture が
既に dispose() されたオブジェクトの場合に発生します
(ILLEGAL_STATE)。
public void setPerspectiveCorrectionEnabled(boolean isOn)
DrawableObject3D の記述: パースペクティブコレクション(テクスチャの歪み補正)の有効化/無効化を設定します。
初期状態では、無効に設定されています。
DrawableObject3D 内の setPerspectiveCorrectionEnabledisOn - 有効化するならば true を指定します。
しないならば false を指定します。
UIException - 既に dispose() されたオブジェクトに対して呼ばれた場合に発生します
(ILLEGAL_STATE)。
public void setBlendMode(int mode)
DrawableObject3D の記述: 図形用ブレンドモードを設定します。
DrawableObject3D 内の setBlendModemode - 図形用ブレンドモードを指定します。
DrawableObject3D.BLEND_NORMAL,
DrawableObject3D.BLEND_ALPHA,
DrawableObject3D.BLEND_ADD
のいずれかを指定します。
UIException -
既に dispose() されたオブジェクトに対して呼ばれた場合に発生します
(ILLEGAL_STATE)。
IllegalArgumentException - 引数 mode が
DrawableObject3D.BLEND_NORMAL,
DrawableObject3D.BLEND_ALPHA,
DrawableObject3D.BLEND_ADD,
のいずれでもない場合に発生します。
public void setTransparency(float v)
DrawableObject3D の記述: 透明度をパーセントで設定します。
透明度は、設定されている図形用ブレンドモードが
DrawableObject3D.BLEND_ALPHA,
DrawableObject3D.BLEND_ADD
のどちらかのときに有効になります。
DrawableObject3D 内の setTransparencyv - 透明度をパーセントで指定します。
100 のときが不透明です。
UIException - 既に dispose() されたオブジェクトに対して呼ばれた場合に発生します
(ILLEGAL_STATE)。
IllegalArgumentException - 引数 v が
Float.NaNの場合、
0 未満の場合、あるいは 100 より大きい場合に発生します。