2011-04-24 163 views
32

我在搞SDL,發現你不能用SDL旋轉圖像。有人問到問題,人們說使用OpenGL進行輪換。我一直認爲SDL與OpenGL是完全分離的,我錯在想這個嗎?我甚至發現了在SDL中使用OpenGL的教程,這讓我更加困惑。 SDL和OpenGL之間的關係究竟是什麼?爲什麼不只是使用OpenGL,如果它更強大,並允許你做更多(這是從我讀過的)?爲什麼SDL和OpenGL相關?

+0

如何旋轉特定問題:https://stackoverflow.com/questions/30198713/how-to-rotate-a-rect-in-sdl2現在可以完成,但更高級的效果將不可能。 SDL + OpenGL最小示例:https:// stackoverflow。com/questions/40061276 /如何繪製三角形與sdl2-and-opengl/40824828#40824828 – 2017-11-22 22:31:25

回答

18

SDL是一個跨平臺的多媒體庫,旨在提供對音頻,鍵盤,鼠標,操縱桿等的低級訪問。它還通過OpenGL支持3D硬件。

OpenGLis a standard specification defining a cross-language, cross-platform API for writing applications that produce 2D and 3D computer graphics。該界面由超過250個不同的函數調用組成,可用於從簡單圖元中繪製複雜的三維場景。 OpenGL由Silicon Graphics Inc.(SGI)於1992年開發[4],廣泛應用於CAD,虛擬現實,科學可視化,信息可視化和飛行模擬。它也用於視頻遊戲,它在Microsoft Windows平臺上與Direct3D競爭(參見OpenGL與Direct3D)。

2

SDL處理輸入,窗口創建,圖像加載以及OpenGL無法處理的其他一些功能。

3

SDL將OpenGL用作硬件渲染器,用於需要在某些平臺上進行硬件渲染的內容。如果你有這樣一個平臺,那麼OpenGL就是SDL是抽象的基礎API。

10

SDL是OpenGL上的一層;實際上它默認使用Windows上的GDI,並且還有一個DirectX後端。人們可能會說,你可以使用OpenGL來避開在默認使用OpenGL(ahem,Linux)的平臺上SDL 的限制,因爲更高級別的抽象並不公開此功能。然而,那麼你的代碼對於Windows而言是「少」可移植的(或者至少使用GDI後端的Windows)。

此外,SDL除了圖形外還有很多其他的功能 - 音頻,輸入等,OpenGL不會這樣做。

+0

是否有文檔或其他地方有關SDL在Windows上使用GDI的任何證據? – SerG 2014-01-02 12:48:31

+0

[Wikipedia](http://en.wikipedia.org/wiki/Simple_DirectMedia_Layer)指出GDI是Windows「默認端口」部分的默認後端。 – 2014-01-02 22:44:08

2

正如很多人所說。 SDL處理的不僅僅是渲染。除了處理音頻,輸入和所有其他好東西以外,它還通過讓您訪問許多您需要自行實現的功能來簡化圖形的使用。
因此,SDL是OpenGL之上的抽象層。您仍然可以在應用程序中訪問OpenGL,因此可以使用它的全部功能。
一個簡單的補充,因爲你似乎對這種API是新的:如果你想要一個類似於SDL的API(用於2D圖形),我可以推薦看看SFML。它基於C++而不是C具有旋轉等功能。它也基於OpenGL。 :)

4

關於您關於旋轉圖形的示例:最好使用OpenGL(即硬件加速)而不是使用SDL本身(即在CPU上),因爲它通常是計算密集型的(特別是如果您有很多位圖可以旋轉每一幀,並且您希望效果平滑)。

但是,沒有任何東西(除了原因)使您無法使用具有模塊SDL_rotozoom的SDL_gfx程序包負責旋轉和縮放位圖。