2011-04-23 59 views
4

有沒有人設法在運行時將OpenGL VBO導出爲外部文件格式?我會很感激任何指向正確方向的指針,因爲我不知道如何去做這件事。OpenGL將VBO保存到文件(Obj或其他)

+1

一個VBO只是一個字節數組,你不能一般地輸出它而不知道里面是什麼,所以問題只是輸出一個網格。 – 2011-04-23 02:06:47

+0

那麼,我擁有OpenGL必須呈現這些項目的所有資源,我需要將這些項目導出到文件中。有任何想法嗎? – Precursor 2011-04-23 03:08:39

回答

3

OpenGL只是一個複雜的繪圖API。緩衝區對象中的數據是任意的。它是你的程序,賦予它意義(和OpenGL,BTW)。有人必須將該數據上傳到VBO(glBufferData調用),並通過發出glDrawElementsglDrawArrays的正確呼叫來理解它。因此,無論數據來自哪裏,最好從那裏寫一個文件,避免繞過OpenGL。但是,如果您的程序中沒有複製副本,則可以使用glGetBufferSubData獲取緩衝區中數據的副本。

您的程序中沒有任何數據副本的原因可能是,您的存儲器使用glMapBuffer將緩衝區映射到您的程序中。您也可以使用這種映射(最好是隻讀訪問)來檢索緩衝區中的數據。再加上一些邏輯

必須供應,它的意義,你可以寫上你喜歡的任何文件格式。但編寫文件的負擔在你身上。

1

如果你只是想導出頂點和三角形的數據,看看以下格式:

這些都是ASCII格式,方便理解,並直接寫。

顯然,正如您在評論中提到的那樣必須瞭解數據如何在VBO中編碼,因爲它只是一個字節數組。這個想法就是獲得VBO的內容,使用特定的應用程序邏輯將其解碼爲頂點和三角形,然後以一種文件格式導出這些數據。

+2

不要忘記[Wavefront OBJ](http://en.wikipedia.org/wiki/Wavefront_.obj_file)(至少非常容易編寫)。 – 2011-07-22 22:49:27