繁体   English   中英

OpenGL纹理与FBO

[英]OpenGL texture vs FBO

我是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(帧缓冲对象)是一种可以渲染而不是屏幕的屏幕外缓冲区,通常用于直接渲染到纹理中。 因此,我不会以任何方式看到你的问题在哪里“纹理与FBO”,因为它们是非常正交的概念,并且使用FBO在你的例子中没有任何意义。 也许你正在用VBO(顶点缓冲对象)PBO(像素缓冲对象)弄乱FBO? 但是那时候你的问题仍然很不合适。

编辑:如果你真的使用FBO,那只是因为你认为他们神奇地将他们引用的纹理存储在视频内存中,那么请放心,纹理总是存储在视频内存中,并且在你的情况下使用FBO是完全的无用。

为了你的建议,我建议你只使用标准的OpenGL纹理。

我想我明白你想做什么,但是FBO保留了比你需要的更多的信息,因此需要更长的时间来渲染你的目的地(这是一个FBO)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM