Java 在jogl中渲染大型VBO对象
我正在尝试渲染大型VBO数组对象,其中包含约700000个值,我的元素数组缓冲区中有约1500000个值。但我得到的是一个空白屏幕。另一方面,如果我只使用VAO,我的代码工作正常。我的代码如下:Java 在jogl中渲染大型VBO对象,java,opengl,rendering,jogl,vbo,Java,Opengl,Rendering,Jogl,Vbo,我正在尝试渲染大型VBO数组对象,其中包含约700000个值,我的元素数组缓冲区中有约1500000个值。但我得到的是一个空白屏幕。另一方面,如果我只使用VAO,我的代码工作正常。我的代码如下: //Data buffers FloatBuffer vertexBuffer = GLBuffers.newDirectFloatBuffer(this.coordCount); vertexBuffer.put(Vertices); vertexBuffer.rewi
//Data buffers
FloatBuffer vertexBuffer = GLBuffers.newDirectFloatBuffer(this.coordCount);
vertexBuffer.put(Vertices);
vertexBuffer.rewind();
IntBuffer indexBuffer = GLBuffers.newDirectIntBuffer(this.indexCount);
indexBuffer.put(index);
indexBuffer.rewind();
//setting up the VBO
int nVBO = 2;
int[] VBO = new int[nVBO];
gl.glGenBuffers(nVBO, VBO,0);
gl.glBindBuffer(GL.GL_ARRAY_BUFFER, VBO[0]);
gl.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER,VBO[1]);
gl.glBufferData(GL.GL_ARRAY_BUFFER, this.coordCount*Float.SIZE, vertexBuffer, GL.GL_STATIC_DRAW);
gl.glBufferData(GL.GL_ELEMENT_ARRAY_BUFFER, this.indexCount*Integer.SIZE, indexBuffer, GL.GL_STATIC_DRAW);
gl.glBindBuffer(GL.GL_ARRAY_BUFFER, VBO[0]);
gl.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, VBO[1]);
gl.glEnableClientState(GLPointerFunc.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL.GL_FLOAT, 0, 0);
//gl.glVertexPointer(3, GL.GL_FLOAT, 0, vertexBuffer);
//gl.glDrawArrays(GL.GL_TRIANGLE_STRIP, 0, 4);
gl.glDrawElements(GL.GL_TRIANGLES, this.indexCount, GL.GL_UNSIGNED_INT, 0);
//gl.glDrawElements(GL.GL_TRIANGLES, this.indexCount, GL.GL_UNSIGNED_INT, indexBuffer);
gl.glDisableClientState(GLPointerFunc.GL_VERTEX_ARRAY);
gl.glBindBuffer(GL.GL_ARRAY_BUFFER, 0);
gl.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, 0);
关于如何解决这个问题,有什么线索/建议吗?每次循环运行时都会调用这个代码块吗?如果是,您应该将vbo阶段划分为不同的块。可能会帮助你如何划分。(在我发布的链接中,您应该只关注initVBO和renderVbo函数)我猜您是按顺序初始化vbo的,这可能会使您的程序无响应。它适用于小型vbo对象吗?是的,我已经尝试了50个三角形,它正适用于此。但不适用于大型数据集。您使用的是什么GPU?您是否正在运行软件仿真?您是否确保应用程序不会在加载数据时挂起?这是图形卡型号:01:00.0 VGA兼容控制器:Advanced Micro Devices,Inc.[AMD/ATI]Whistler[Radeon HD 6730M/6770M/7690M XT](版本ff)