com.nttdocomo.ui.ogl
インタフェース FloatBuffer

すべてのスーパーインタフェース:
DirectBuffer

public interface FloatBuffer
extends DirectBuffer
 [iアプリオプションAPI]

float単位のダイレクトメモリバッファのインタフェースです。
実際のバッファはDirectBufferFactoryにて取得してください。

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

メソッドの概要
 float[] get(int index, float[] buff)
           ダイレクトバッファからデータを読み込みます。
 float[] get(int index, float[] buff, int offset, int length)
           ダイレクトバッファからデータを読み込みます。
 FloatBuffer madd(FloatBuffer src1, FloatBuffer src2, float multiplier)
           FloatBuffer同士の演算を行ないます。
 void put(int index, float[] buff)
           ダイレクトバッファへデータを書き込みます。
 void put(int index, float[] buff, int offset, int length)
           ダイレクトバッファへデータを書き込みます。
 FloatBuffer transform(FloatBuffer src, Matrix4f matrix, int itemSize, int itemCount)
           FloatBufferMatrix4fの演算を行ないます。
 
インタフェース com.nttdocomo.ui.ogl.DirectBuffer から継承したメソッド
clearSegment, length, setSegment
 

メソッドの詳細

get

public float[] get(int index,
                   float[] buff)

ダイレクトバッファからデータを読み込みます。

get(index, buff, 0, buff.length)と同じ動作となります。

パラメータ:
index - 読み込む先頭位置
buff - 格納するデータ配列
戻り値:
引数で与えられたbuffへの参照がそのまま返ります。
例外:
NullPointerException - buffがnullの場合に発生します。
IllegalArgumentException - indexが負の値またはlength()以上, index + buff.length > length() の場合に発生します。

get

public float[] get(int index,
                   float[] buff,
                   int offset,
                   int length)

ダイレクトバッファからデータを読み込みます。

ダイレクトバッファのindexの位置からlength分データを読み出し、buffのoffsetから格納します。

パラメータ:
index - 読み込む先頭位置
buff - 格納するデータ配列
offset - データを格納する先頭位置
length - データを格納する要素数
戻り値:
引数で与えられたbuffへの参照がそのまま返ります。
例外:
NullPointerException - buffがnullの場合に発生します。
IllegalArgumentException - index,offset,lengthが負の値, offset + length > buff.length, index + length > length() の場合に発生します。

put

public void put(int index,
                float[] buff)

ダイレクトバッファへデータを書き込みます。

put(index, buff, 0, buff.length)と同じ動作となります。

パラメータ:
index - 書き込む先頭位置
buff - 書き込むデータ配列
例外:
NullPointerException - buffがnullの場合に発生します。
IllegalArgumentException - indexが負の値またはlength()以上, index + buff.length > length() の場合に発生します。

put

public void put(int index,
                float[] buff,
                int offset,
                int length)

ダイレクトバッファへデータを書き込みます。

buffのoffsetの位置からlength分を、ダイレクトバッファのindexの位置へ書き込みます。

パラメータ:
index - 書き込みを行う先頭位置
buff - 書き込むデータ配列
offset - 書き込むデータの先頭位置
length - 書き込むデータの要素数
例外:
NullPointerException - buffがnullの場合に発生します。
IllegalArgumentException - index,offset,lengthが負の値, offset + length > buff.length, index + length > length() の場合に発生します。

madd

public FloatBuffer madd(FloatBuffer src1,
                        FloatBuffer src2,
                        float multiplier)

FloatBuffer同士の演算を行ないます。

以下の計算を行ないます。 計算結果はこのインスタンスに保存されます。

変数の説明
 int length = このインスタンスのセグメント長(src1,src2のセグメント長)
 int indexthis = このインスタンスのセグメントの開始インデックス
 int index1 = src1のセグメントの開始インデックス
 int index2 = src2のセグメントの開始インデックス
計算式
  • src1 != null かつ src2 != nullである場合
     while (length-- != 0) {
        this[indexthis++] = src1[index1++] + (multiplier*src2[index2++]);
     }
  • src1 == null かつ src2 != nullである場合
     while (length-- != 0) {
        this[indexthis++] = multiplier*src2[index2++];
     }
  • src1 != null かつ src2 == nullである場合
     while (length-- != 0) {
        this[indexthis++] = src1[index1++];
     }

このインスタンスのセグメント長、src1のセグメント長およびsrc2のセグメント長が 全て一致している必要があります。一致していない場合は例外が発生します。

以下に本メソッドの使用例を示します。

  • モデルAからモデルBへのMorphing
     FloatBuffer modelA = ...;      // モデルA
     FloatBuffer modelB = ...;      // モデルB
     FloatBuffer targetModel = ...; // Morphing結果格納先
     FloatBuffer deltaModel = ...;  // モデルAとモデルBの差分
    
     // モデルAとモデルBの差分を求める
     deltaModel.madd(modelB, modelA, -1);
    
     // モデルAを基本として10%ずつモデルBに遷移させる
     for(int i = 1; i <= 10; i++) {
       targetModel.madd(modelA, deltaModel, (i*0.1f));
     }
  • バッファコピー
     FloatBuffer buf1 = ...;  // バッファ1
     FloatBuffer buf2 = ...;  // バッファ2
    
     // バッファ1の内容をバッファ2にコピーする
     buf2.madd(buf1, null, 0);

パラメータ:
src1 - 演算対象となるバッファ1を指定します。
src2 - 演算対象となるバッファ2を指定します。
multiplier - バッファ2の各要素に対して乗算を行なう値を指定します。
戻り値:
このインスタンスへの参照を返します。
例外:
NullPointerException - src1, src2の両方がnullである場合に発生します。
IllegalArgumentException - 引数src1,src2のいずれかにシステムが提供しているFloatBufferオブジェクト 以外のオブジェクトが指定された場合に発生します。
IllegalArgumentException - このインスタンスのセグメント長、src1のセグメント長およびsrc2のセグメント長が 一致していない場合に発生します。
導入されたバージョン:
DoJa-5.1 (905i)

transform

public FloatBuffer transform(FloatBuffer src,
                             Matrix4f matrix,
                             int itemSize,
                             int itemCount)

FloatBufferMatrix4fの演算を行ないます。

以下の計算を行ないます。 計算結果はこのインスタンスに保存されます。

変数の説明
 int indexthis = このインスタンスのセグメントの開始インデックス
 int indexsrc = 引数srcのセグメントの開始インデックス
itemSize = 2のとき
 while(itemCount-- > 0) {
     int xidx = indexsrc++;
     int yidx = indexsrc++;

     this[indexthis++] = m0*src[xidx] + m4*src[yidx] + m12;
     this[indexthis++] = m1*src[xidx] + m5*src[yidx] + m13;
 }
itemSize = 3のとき
 while(itemCount-- > 0) {
     int xidx = indexsrc++;
     int yidx = indexsrc++;
     int zidx = indexsrc++;

     this[indexthis++] = m0*src[xidx] + m4*src[yidx] + m8*src[zidx] + m12;
     this[indexthis++] = m1*src[xidx] + m5*src[yidx] + m9*src[zidx] + m13;
     this[indexthis++] = m2*src[xidx] + m6*src[yidx] + m10*src[zidx] + m14;
 }
itemSize = 4のとき
 while(itemCount-- > 0) {
     int xidx = indexsrc++;
     int yidx = indexsrc++;
     int zidx = indexsrc++;
     int widx = indexsrc++;

     this[indexthis++] = m0*src[xidx] + m4*src[yidx] + m8*src[zidx] + m12*src[widx];
     this[indexthis++] = m1*src[xidx] + m5*src[yidx] + m9*src[zidx] + m13*src[widx];
     this[indexthis++] = m2*src[xidx] + m6*src[yidx] + m10*src[zidx] + m14*src[widx];
     this[indexthis++] = m3*src[xidx] + m7*src[yidx] + m11*src[zidx] + m15*src[widx];
 }

パラメータ:
src - 演算対象となるバッファを指定します。
matrix - 演算対象となるMatrix4fを指定します。
itemSize - バッファのアイテムサイズを指定します。 2,3,4のいずれかが指定可能です。
itemCount - バッファのアイテムの個数を指定します。
戻り値:
このインスタンスへの参照を返します。
例外:
NullPointerException - 引数srcまたはmatrixがnullである場合に発生します。
IllegalArgumentException - 引数srcにシステムが提供しているFloatBufferオブジェクト以外のオブジェクトが指定された場合に発生します。
IllegalArgumentException - 引数itemSizeが2,3,4のいずれでもない場合、 またはitemCountが負の値である場合に発生します。
ArrayIndexOutOfBoundsException - このインスタンスのセグメント長をlengththis、 引数srcのセグメント長をlengthsrcとしたとき、 itemSize*itemCount > lengththisまたはitemSize*itemCount > lengthsrc となる場合に発生します。
NullPointerException - 引数matrixの行列要素Matrix4f.mにnullが設定されている場合に発生します。
ArrayIndexOutOfBoundsException - 引数matrixの行列要素Matrix4f.mに配列長が4x4=16未満の配列が設定されている場合に発生します。
導入されたバージョン:
DoJa-5.1 (905i)


NTT DOCOMO,INC.

本製品または文書は著作権法により保護されており、その使用、複製、再頒布および逆コンパイルを制限するライセンスのもとにおいて頒布されます。NTTドコモ(その他に許諾者がある場合は当該許諾者も含めて)の書面による事前の許可なく、本製品および関連する文書のいかなる部分も、いかなる方法によっても複製することが禁じられます。フォントを含む第三者のソフトウェアは、著作権法により保護されており、その提供者からライセンスを受けているものです。

Sun、Sun Microsystems、Java、J2MEおよびJ2SEは、米国およびその他の国における米国 Sun Microsystems,Inc.の商標または登録商標です。サンのロゴマークは、米国 Sun Microsystems, Inc.の登録商標です。

FeliCaは、ソニー株式会社が開発した非接触ICカードの技術方式です。FeliCaは、ソニー株式会社の登録商標です。

「iモード」、「iアプリ/アイアプリ」、「i-αppli」ロゴ、「DoJa」はNTTドコモの商標または登録商標です。

その他記載された会社名、製品名などは該当する各社の商標または登録商標です。