0

slick2DにVBOを追加しようとしています。私がWebで見つけたのは、3DコンテキストでVBOを初期化する方法だけです。誰もが2Dでそれを行う方法を知っていますか?

私の実際のテスト(滑らかなコンテキストで4つの正方形を作成)はこれを作成します(私は黒でコードを追加します):(ソース:canardpc.comslick2Dのvbo

私のinitの下(私のGameStateのinitメソッド内):

// set up OpenGL
GL11.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
            
GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY);
GL11.glEnableClientState(GL11.GL_COLOR_ARRAY);
    
GL11.glMaterial(GL11.GL_FRONT, GL11.GL_SPECULAR, floatBuffer(1.0f, 1.0f, 1.0f, 1.0f));
GL11.glMaterialf(GL11.GL_FRONT, GL11.GL_SHININESS, 25.0f);
    
// set up the camera
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
    
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();
    
// create our vertex buffer objects
IntBuffer buffer = BufferUtils.createIntBuffer(1);
GL15.glGenBuffers(buffer);
    
int vertex_buffer_id = buffer.get(0);
FloatBuffer vertex_buffer_data = BufferUtils.createFloatBuffer(vertex_data_array.length);
vertex_buffer_data.put(vertex_data_array);
vertex_buffer_data.rewind();
    
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertex_buffer_id);
GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertex_buffer_data, GL15.GL_STATIC_DRAW);

そして、レンダリング(ゲーム状態のrenderメソッドで):

g.setDrawMode(Graphics.MODE_ALPHA_BLEND) ;
        
// perform rotation transformations
GL11.glPushMatrix();

// render the cube
GL11.glVertexPointer(3, GL11.GL_FLOAT, 28, 0);
GL11.glColorPointer(4, GL11.GL_FLOAT, 28, 12);

GL11.glDrawArrays(GL11.GL_QUADS, 0, vertex_data_array.length / 7);

// restore the matrix to pre-transformation values
GL11.glPopMatrix();

他のすべてのレンダリング(テキストとスプライト)が消え、座標がウィンドウサイズではなくなったため、何か問題があると思います。

編集:私GL11.glOrtho(0,800,600,0,-1,1);は奇妙な結果でこのようなことを試みます

ありがとう

4

1 に答える 1

0

GL11.glOrtho(0,800,600,0、-1,1);を追加して問題を解決します。glEnableClientState(glDisableClientState)を無効にします。

しかし、私はついにそれをネイティブに行うlibgdxフレームワークに移行します。

于 2012-10-16T14:12:14.677 に答える