2011-10-16 147 views
1

我對OpenGL很新穎,只是想要一些快速建議。我想爲遊戲畫一個平鋪的背景。我想這意味着將一大堆像精靈一樣的精靈畫到屏幕上。我有大約48列到30行,因此1440個瓦片(瓦片根據遊戲而改變,所以我不能預先渲染整個網格)。OpenGL紋理vs FBO

目前在啓動時,我創建了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位視頻遊戲背景。這是我正在進行的工作的圖像。

work in progress

在後臺的結構是我說的是精靈,不同的部分是INNY角落,outty(凹的)角,方形填充,直的邊緣。對不起,因爲問題搞亂了。

+1

我想你一定是混淆的術語,或者你不明白什麼是FBO。你不希望在一個場景中有1440個FBO,甚至更多,因爲你仍然必須以某種方式將圖像顯示在屏幕上(繪製到FBO中只會吸引到不可見的表面,除非它是默認的FBO)。紋理四邊形是你想要的。另外,5,000微秒是5ms,這相當於幀時間(相當於約200fps)是可以接受的。 – Damon

+0

你已經編輯了你的問題,但你仍然不能確定FBO是什麼。不,紋理總是在視頻內存中播放,不必每次都傳輸。是的,你錯了,因爲我完全無法理解你的問題。你可能在談論維也納國際組織?如果您不確定,請查看這些概念是什麼,並重新提出您的問題。 –

+0

嘿,感謝您的反饋,我認爲可能是這樣。我沒有1440 fbos,對不起,我誤解了這一點。我其實有6個,最多可以抽出1440次。 雖然5000微秒是相當不錯的,但我仍然希望加快一點。遊戲(人物角色和網格滿)下降到30 fps,這沒問題,但我不介意優化。網格是最慢的部分,所以我認爲這應該是我首先想到的。我重新提出了問題,再次感謝。 – rykardo

回答

3

我真的不明白你的問題。紋理是可以應用於多邊形的(通常爲2維)圖像,而FBO (framebuffer object)是一種可以渲染爲屏幕外的緩衝區,而不是屏幕,通常用於直接渲染到紋理中。所以我沒有看到你的問題在任何方面都可能是「紋理與FBO」,因爲它們是非常正交的概念,在你的例子中使用FBO沒有任何意義。也許你在搞搞FBO VBOs (vertex buffer objects)PBOs (pixel buffer objects)?但是你的問題仍然很不妥。

編輯:如果你真的在使用FBO,那只是因爲你認爲他們神奇地把它們引用的紋理存儲在視頻內存中,然後放心,紋理總是存儲在視頻內存中,並使用FBO在你的情況下是完全沒用的。

+0

我想我知道我在哪裏感到困惑。我正在使用OpenFrameworks(http://www.openframeworks.cc/),我認爲它運行的是OpenGL。他們有一個FBO類,http://www.undef.ch/uploads/ofDoc/html/classof_fbo.html。從使用這個我認爲他們是紋理的一種替代。所以我堅持的是我是否應該用它們來繪製或者只是使用簡單的紋理。 – rykardo

+1

@rykardo他們的FBO類似乎是OpenGL FBO的封裝,因此只有當您想要將**渲染到紋理(在運行時生成拼貼)時才需要它。對於一般的紋理使用紋理。他們的FBO不是紋理的替代品,而是更復雜的東西,它內部具有紋理,並且可以執行其他操作(渲染到此紋理中)。但是您可以像使用普通紋理一樣使用其內部紋理,所以如果您需要額外的功能,使用紋理進行紋理化不會對性能造成任何損害,因爲此紋理仍然是簡單的紋理。 –

+0

好的,現在開始變得更有意義了,感謝在那裏堅持着我。我應該花一些時間學習術語,閱讀文檔等。 – rykardo

0

爲了你的行爲,我建議你只使用標準的OpenGL紋理。

我想我明白你想要做什麼,但FBO保留的信息比你需要的要多得多,因此需要更長的時間才能呈現到你的目的地(這是一個FBO)。

+0

好吧。是的,爲了簡化一些東西,我只想繪製一組同樣的精靈。謝謝你在那裏澄清。 – rykardo