我在搞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集成LibRocket
- 2. 内存泄漏和相关的OpenGL,SDL错误和图形驱动程序
- 3. 为什么相机必须在OpenGL
- 4. OpenGL + SFML或SDL?
- 5. 各种Android OpenGL相关类之间的关系是什么?
- 6. OpenGL C++ SDL 2D Shadows
- 7. SDL:什么是Blit?
- 8. Linux上的SDL OpenGL新手,这有什么问题?
- 9. 在Ubuntu下与SDL和OpenGL链接
- 10. 使用OpenGL和SDL逐帧动画
- 11. 为什么rubygame和gosu比纯opengl慢?
- 12. Haskell SDL绑定:为什么SDL在这里没有画圆圈?
- 13. 为什么SDL定义主宏?
- 14. C++ SDL,为什么SDL_LoadBMP()返回NULL?
- 15. SDL/OpenGL纹理透明
- 16. Mystery OpenGL/SDL内存增长
- 17. SDL/OpenGL浮点异常
- 18. OpenGL vs OpenGL ES和OpenGL 1.x vs OpenGL 2.0要学什么?
- 19. 什么是android opengl相当于surfaceHolder.lockCanvas()
- 20. 为什么JSTL有sql相关标签
- 21. 为什么OpenGL版本为0.0?
- 22. OSX上的OpenGL和SDL - glDrawElements()上的EXC_BAD_ACCESS() - 适用于GLUT,不适用于SDL
- 23. 什么是SDL的附加文件依赖关系?
- 24. SDL是纯粹的opengl还是不是?如果它有什么区别?
- 25. 为什么curl_multi_select和curl_multi_info_read相互矛盾?
- 26. 为什么(!a)和(a == false)不相等?
- 27. JLS,Java和相关技术之间的关系是什么?
- 28. OpenGL:什么是MatrixMode?
- 29. 什么是OpenGL RBO?
- 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