我是OpenGL的新手,只需要一些快速建议。我想为游戏绘制平铺的背景。我想这意味着在屏幕上绘制一大堆精灵对象。我大约有48列到30行,因此有1440个图块(图块会根据游戏而变化,因此我无法预先渲染整个网格)。
目前,在启动时,我创建了6个不同的FBO(使用OpenFrameworks中的ofFbo类),它们充当6个不同的图块。然后,我绘制这些缓冲区(最多1400次),为每个图块选择一个。因此,只有6个fbos,被吸引了很多次。 (缓冲区在启动时被吸引,一旦创建就永远不会更改)。
for (int x=0; x<columns; x++) {
for (int y=0; y<rows; y++) {
// Get tile type and rotation from tile struct.
tileNum = tile.form
rotNum = tile.rot
// Draw image/texture/fbo that's stored in a std vector.
tileSet->draw(x*TILESIZE, y*TILESIZE, TILESIZE, TILESIZE);
}
}
我认为这是错误的方法,并且想知道是否有任何新的最佳/最佳方法来做到这一点。想一些像老式8位视频游戏背景的东西。这是我正在进行的工作的图像。
背景中的结构是我正在谈论的精灵,不同的部分是inny角,outty(凹)角,正方形填充和直边。很抱歉弄乱了问题。
最佳答案
我不太了解您的问题。纹理是可以应用于多边形的(通常是2维)图像,而FBO (framebuffer object)是一种可以渲染到屏幕之外的屏幕外缓冲区,通常用于直接渲染为纹理。因此,我看不出您的问题在任何地方都可能是“纹理与FBO”的问题,因为它们是非常正交的概念,在您的示例中使用FBO毫无意义。也许您是用VBOs (vertex buffer objects)或PBOs (pixel buffer objects)弄乱了FBO?但是,您的问题仍然很不恰当。
编辑:如果您真的在使用FBO,并且仅仅是因为您认为它们神奇地使它们引用的纹理存储在视频内存中,那么请放心,纹理始终存储在视频内存中,并且在您的情况下使用FBO是完全没用的。
关于c++ - OpenGL纹理与FBO,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7783695/