画像読み込み

画像読み込み




画像を読み込まないと何も始まらないので画像を読み込みます。

Texture.java
    //  各種取得
    final public boolean    IsLoaded()          { return ( m_DrawDevice != null );  }

    //  ロード
    protected boolean   LoadImage( DrawDevice drawDevice, Bitmap bmp )
    {
        if( IsLoaded())
        {
            //  ロード済み
            return false;
        }

        GL10    gl  = drawDevice.GetGl();

        //  テクスチャ作成
        int[]   aTexID  = new int[ 1 ];
        {
            gl.glGenTextures( 1, aTexID, 0 );
        }
        m_TexID = aTexID[ 0 ];
        gl.glBindTexture( GL10.GL_TEXTURE_2D, m_TexID );

        //  拡大、縮小フィルタ設定
        //gl.glTexParameterf( GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST );    //< 軽い
        gl.glTexParameterf( GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR );   //< 重ければニアレストネイバーに変更
        gl.glTexParameterf( GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR );   //< 重ければニアレストネイバーに変更

        //  繰り返し方法を設定
        gl.glTexParameterf( GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE );
        gl.glTexParameterf( GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE );

        //  ポリゴンとテクスチャの色関係設定
        gl.glTexEnvf( GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_MODULATE );

        //  サイズ取得
        m_ImageWidth    = bmp.getWidth();
        m_ImageHeight   = bmp.getHeight();

        //  テクスチャ作成
        GLUtils.texImage2D( GL10.GL_TEXTURE_2D, 0, bmp, 0 );
        bmp.recycle();

        //  描画装置保持
        m_DrawDevice    = drawDevice;

        return true;
    }

LoadImageメソッドは派生クラスが呼び出すためのものなのでprotected指定にしています。
また、ロード済みかどうかはDrawDeviceをメンバに持っているかどうかで判定することにします。

        //  テクスチャ作成
        int[]   aTexID  = new int[ 1 ];
        {
            gl.glGenTextures( 1, aTexID, 0 );
        }
        m_TexID = aTexID[ 0 ];
        gl.glBindTexture( GL10.GL_TEXTURE_2D, m_TexID );

この部分でテクスチャを作っています。
また、glBindTexture()で各種設定するテクスチャを今作ったテクスチャに設定してます。

        //  拡大、縮小フィルタ設定
        //gl.glTexParameterf( GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST );    //< 軽い
        gl.glTexParameterf( GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR );   //< 重ければニアレストネイバーに変更
        gl.glTexParameterf( GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR );   //< 重ければニアレストネイバーに変更

ここでは、テクスチャを拡大、縮小した時のピクセルの補間方法を指定します。
とりあえず処理速度的に問題なさそうなのでGL10.GL_LINEARを使ってます。

        //  繰り返し方法を設定
        gl.glTexParameterf( GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE );
        gl.glTexParameterf( GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE );

uv座標が1を超えるときのテクスチャの繰り返しパターンを設定します。
ここでは、ループなしの指定にしています。

        //  ポリゴンとテクスチャの色関係設定
        gl.glTexEnvf( GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_MODULATE );

ポリゴンの色とテクスチャの色をブレンドするように設定してます。
こうすることでポリゴンを白にしたときは画像がそのまま表示、
黒にしたときは黒く表示といったことができるようになります。

        //  サイズ取得
        m_ImageWidth    = bmp.getWidth();
        m_ImageHeight   = bmp.getHeight();

画像サイズを取得しておきます。

        //  テクスチャ作成
        GLUtils.texImage2D( GL10.GL_TEXTURE_2D, 0, bmp, 0 );
        bmp.recycle();

ここで実際にBitmapからテクスチャを作成します。
読み込んだ後はビットマップの解放を促し、メモリを空けます。

これでテクスチャの読み込みができます。
次は、テクスチャの開放とテクスチャデータの取得です。
……取得は単にメンバをGetするだけですが。。。



<前のページ
次のページ>