使用顶点缓冲对象的OpenGL快速纹理绘制.这是这样做的吗?

Mat*_*ell 5 c++ opengl graphics textures vbo

我正在使用OpenGL制作2D游戏.我想通过使用VBO来加速我的纹理绘制.

目前我正在使用立即模式.当我旋转和缩放纹理时,我正在生成自己的坐标.我还具有舍入纹理角的功能,使用多边形基元来绘制它们.

我在想,在没有包含偏移的情况下制作带有顶点的VBO是否是最快的,所以我可以使用glTranslate,glScale和glRotate来移动纹理的绘制位置.然后,我可以使用相同的VBO,无需更改,每次都可以绘制纹理.当我需要为圆角添加坐标时,我只能更改VBO.

这是最好的方法吗?这样做时我应该注意什么?在现代图形卡中使用GL_TRIANGLES而不是GL_QUADS真的最快吗?

谢谢你的回答.

Adi*_*cin 4

为了获得更好的性能,您不应使用立即模式渲染,而应使用顶点缓冲区(在 CPU 或 GPU 上)并使用 glDrawArrays 等类似方法进行绘制。通过修改纹理矩阵乘数来缩放/旋转纹理坐标不是性能问题,您只需为整个网格设置一些小值即可。这里最重要的瓶颈是将每个顶点数据(例如颜色、位置和纹理坐标)传输到 GPU,这就是 GPU 上的顶点缓冲区对象可以提供很大帮助的地方。

如果要绘制到屏幕上的网格是静态的,即设置一次并且以后不需要修改(部分)它,则只需为整个网格(包括所有角)生成一次纹理坐标。您稍后可以使用纹理矩阵乘法器修改整个网格的纹理坐标。但是,如果您想使用不同的变换来修改网格的不同部分,则必须将网格划分为多个部分。根据您的描述,我了解到您想要绘制一个圆角矩形,其中包含一张图片,这可以使用单个静态网格(每个顶点数据的列表)来完成。

最后,GL_QUADS 在现代 OpenGL 规范中也已被弃用。无论如何,它们不提供太多功能,因此您应该将 QUADS 切换为三角形或三角形条/扇形。