0

我正在尝试在 slick2D 中添加 VBO。我在网上找到的只是如何在 3D 上下文中初始化 VBO。任何人都知道如何在 2D 中做到这一点?

我的实际测试(在光滑的上下文中制作 4 个正方形)使这个(我添加黑色的 corrds):(来源: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);

以及渲染(在游戏状态的渲染方法中):

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 回答