パスワードを忘れた? アカウント作成
203653 journal

wuzhiの日記: JOGLの頂点バッファオブジェクト

日記 by wuzhi

自作ゲームプログラムで,弾の描画に,頂点バッファオブジェクトを試してみた.

        //フィールド
        // バッファオブジェクトの名前
        static int[] vboIdBuff=new int[2];
        //バッファデータ領域の実体
        static double[] bulletBufferArray=new double[50000];//てきとーに確保
        static DoubleBuffer bulletBuffer =DoubleBuffer.wrap(bulletBufferArray);
        static int bulletBufferIndex=0;//配列インデクス
...
        public void init(GLAutoDrawable drawable) {
                ...
                // バッファオブジェクトの名前を作成します
                gl.glGenBuffers(vboIdBuff.length, vboIdBuff,0);
        }

        public void display(GLAutoDrawable drawable) {
                ...
                // bulletBufferArray[]に弾の頂点データを詰め込んだ後
                // 頂点データ座標の配列を有効にします
                gl.glEnableClientState(GL.GL_VERTEX_ARRAY);

                // 頂点データオブジェクトのIDを指定します
                gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vboIdBuff[0]);

                //頂点データを用いてバッファオブジェクトを確保し初期化する
                gl.glBufferData(
                                GL.GL_ARRAY_BUFFER,
                                bulletBuffer.capacity()*BufferUtil.SIZEOF_DOUBLE,
                                bulletBuffer,
                                GL.GL_STATIC_DRAW);

                gl.glVertexPointer(3, GL.GL_DOUBLE, 0, 0);

                // 描画します
                try {
                        gl.glDrawArrays(GL.GL_POINTS, 0, bulletBufferIndex*3);
                }catch(Exception e) {
                        System.err.println("Exception:"+e);
                }

                // 頂点データ座標の配列を無効にします
                gl.glDisableClientState(GL.GL_VERTEX_ARRAY);

                //リセット
                bulletBufferIndex=0;
                ...
        }

大体こんな感じ.
とりあえず描画できたけど,今までより速くはならなかった.
頂点数が2~3千ぐらいでは,あまり効果ないのだろうか.

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

192.168.0.1は、私が使っている IPアドレスですので勝手に使わないでください --- ある通りすがり

読み込み中...