我在搞SDL,發現你不能用SDL旋轉圖像。有人問到問題,人們說使用OpenGL進行輪換。我一直認爲SDL與OpenGL是完全分離的,我錯在想這個嗎?我甚至發現了在SDL中使用OpenGL的教程,這讓我更加困惑。 SDL和OpenGL之間的關係究竟是什麼?爲什麼不只是使用OpenGL,如果它更強大,並允許你做更多(這是從我讀過的)?爲什麼SDL和OpenGL相關?
回答
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)。
SDL處理輸入,窗口創建,圖像加載以及OpenGL無法處理的其他一些功能。
SDL將OpenGL用作硬件渲染器,用於需要在某些平臺上進行硬件渲染的內容。如果你有這樣一個平臺,那麼OpenGL就是SDL是抽象的基礎API。
SDL是OpenGL上的一層;實際上它默認使用Windows上的GDI,並且還有一個DirectX後端。人們可能會說,你可以使用OpenGL來避開在默認使用OpenGL(ahem,Linux)的平臺上SDL 的限制,因爲更高級別的抽象並不公開此功能。然而,那麼你的代碼對於Windows而言是「少」可移植的(或者至少使用GDI後端的Windows)。
此外,SDL除了圖形外還有很多其他的功能 - 音頻,輸入等,OpenGL不會這樣做。
是否有文檔或其他地方有關SDL在Windows上使用GDI的任何證據? – SerG 2014-01-02 12:48:31
[Wikipedia](http://en.wikipedia.org/wiki/Simple_DirectMedia_Layer)指出GDI是Windows「默認端口」部分的默認後端。 – 2014-01-02 22:44:08
正如很多人所說。 SDL處理的不僅僅是渲染。除了處理音頻,輸入和所有其他好東西以外,它還通過讓您訪問許多您需要自行實現的功能來簡化圖形的使用。
因此,SDL是OpenGL之上的抽象層。您仍然可以在應用程序中訪問OpenGL,因此可以使用它的全部功能。
一個簡單的補充,因爲你似乎對這種API是新的:如果你想要一個類似於SDL的API(用於2D圖形),我可以推薦看看SFML。它基於C++而不是C具有旋轉等功能。它也基於OpenGL。 :)
關於您關於旋轉圖形的示例:最好使用OpenGL(即硬件加速)而不是使用SDL本身(即在CPU上),因爲它通常是計算密集型的(特別是如果您有很多位圖可以旋轉每一幀,並且您希望效果平滑)。
但是,沒有任何東西(除了原因)使您無法使用具有模塊SDL_rotozoom的SDL_gfx程序包負責旋轉和縮放位圖。
- 1. SDL和OpenGL有什麼關係?
- 2. 爲什麼不應將SDL Window和SdL REnderer聲明爲全局?
- 3. 用SDL和OpenGL集成LibRocket
- 4. SDL多重採樣和OpenGL
- 5. 內存泄漏和相關的OpenGL,SDL錯誤和圖形驅動程序
- 6. 爲什麼相機必須在OpenGL
- 7. SDL OpenGL平滑相機運動
- 8. SDL OpenGL問題
- 9. OpenGL + SFML或SDL?
- 10. 各種Android OpenGL相關類之間的關係是什麼?
- 11. OpenGL C++ SDL 2D Shadows
- 12. SDL:什麼是Blit?
- 13. 爲什麼rubygame和gosu比純opengl慢?
- 14. 爲什麼使用GLSL和OpenGL?
- 15. Linux上的SDL OpenGL新手,這有什麼問題?
- 16. SDL,opengl es和IOS處理異常
- 17. 使用OpenGL和SDL逐幀動畫
- 18. 在Ubuntu下與SDL和OpenGL鏈接
- 19. Haskell SDL綁定:爲什麼SDL在這裏沒有畫圓圈?
- 20. 爲什麼SDL定義主宏?
- 21. 爲什麼SDL_GetWindowWMInfo()需要SDL版本?
- 22. C++ SDL,爲什麼SDL_LoadBMP()返回NULL?
- 23. OpenGL vs OpenGL ES和OpenGL 1.x vs OpenGL 2.0要學什麼?
- 24. 什麼是android opengl相當於surfaceHolder.lockCanvas()
- 25. SDL/Opengl挑選問題
- 26. SDL/OpenGL結果不一致?
- 27. SDL,OpenGL的:分割故障
- 28. sdl表面到opengl紋理
- 29. SDL/OpenGL浮點異常
- 30. SDL/OpenGL紋理透明
如何旋轉特定問題: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