2012年5月24日木曜日

openglで透過して描画(android)

引き続き本で勉強しながら、アクションゲームを作っています。

透過処理をいれてopenglで描画できるように取り組んでアルファをいれた描画を実装しました。
以下結果です。

コントローラの部分とボタンの部分に透過処理をして、背景が透けて見えるようにしました。

前に、透過のやり方が本に載っていないと書いたんですが、やりかたが書いてありましたすいません。サンプルゲームには使用していないと思います。

やり方(本のソースに沿う場合)

SpriteBatcherクラスをいじります。

コンストラクタで,

 // コンストラクタ
    public SpriteBatcher(GLGraphics glGraphics, int maxSprites) {
        // 8 = color(4) + position(2) + u,v(2)(色を入れない場合は4*4になる)                
        this.verticesBuffer = new float[maxSprites*4*8];
        // colorフラグをオン(colorの要素もメモリに追加する)
        this.vertices = new Vertices(glGraphics, maxSprites*4, maxSprites*6,true,true);
        this.bufferIndex = 0;
        this.numSprites = 0;
               
        short[] indices = new short[maxSprites*6];
        int len = indices.length;
        short j = 0;
        // 三角形生成
        for (int i = 0; i < len; i += 6, j += 4) {
                indices[i + 0] = (short)(j + 0);
                indices[i + 1] = (short)(j + 1);
                indices[i + 2] = (short)(j + 2);
                indices[i + 3] = (short)(j + 2);
                indices[i + 4] = (short)(j + 3);
                indices[i + 5] = (short)(j + 0);
        }
        vertices.setIndices(indices, 0, indices.length);               
    }

そして、drawSpriteメソッドで、

    public void DrawSprite(float x, float y, float width, float height, TextureRegion region,float r,
    float g,float b,float a) {
        float x2 = x + width;
        float y2 = y + height;
        // color部分を追加する
        verticesBuffer[bufferIndex++] = x;
        verticesBuffer[bufferIndex++] = y;
        verticesBuffer[bufferIndex++] = r;
        verticesBuffer[bufferIndex++] = g;
        verticesBuffer[bufferIndex++] = b;
        verticesBuffer[bufferIndex++] = a;
        verticesBuffer[bufferIndex++] = region.u1;
        verticesBuffer[bufferIndex++] = region.v2;
        ..以下同じ

    }

これで透過ができました。
ただ容量を食うので、やりすぎると重いです。

しかし、拡張しにくいソースだなー、
後はひたすら絵を書いてプログラムを書きまくるだけなんで、6月に完成できるようにがんばりたいです。

後は、ソースコードがコピペしにくいので、ソースを乗っけるのが大変、
なんかうまくやるブロガーの機能があるんだろうなー。
調べるのが......

がんばろう






0 件のコメント:

コメントを投稿