我正在搞乱SDL并发现你不能用SDL旋转图像。问题到处都是,人们说使用OpenGL进行轮换。我一直认为SDL与OpenGL是完全分开的,我在思考这个问题时错了吗?我甚至找到了在SDL中使用OpenGL的教程,这让我更加困惑。 SDL和OpenGL之间究竟有什么关系?为什么不使用OpenGL,如果它更强大,并允许你做更多(这是从我读过的)?
答案 0 :(得分:24)
SDL是一个跨平台的多媒体库,旨在提供对音频,键盘,鼠标,操纵杆等的低级访问。它还通过OpenGL支持3D硬件。
OpenGL is 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)。
答案 1 :(得分:14)
SDL是OpenGL之上的一层;实际上它默认在Windows上使用GDI,并且还有一个DirectX后端。人们可能会说你可以使用OpenGL在默认使用OpenGL (ahem,Linux)的平台上克服SDL 的限制,因为更高级别的抽象不会暴露这种功能。但是,您的代码“不太”可移植到Windows(或至少使用GDI后端的Windows)。
此外,除了图形之外,SDL还做了许多其他的事情 - 音频,输入等,而OpenGL却没有。
答案 2 :(得分:6)
SDL处理输入,窗口创建,图像加载以及OpenGL无法处理的其他一些功能。
答案 3 :(得分:6)
SDL将OpenGL用作需要在某些平台上进行硬件渲染的内容的硬件渲染器。如果你有这样一个平台,那么OpenGL就是SDL作为抽象的底层API。
答案 4 :(得分:5)
关于旋转图形的示例:使用OpenGL(即硬件加速)比使用SDL本身(即在CPU上)更好,因为它通常是计算密集型的(特别是如果你有很多位图需要旋转)每一帧,你希望效果是平滑的。)
然而,除了原因之外,没有任何东西可以阻止你使用SDL_gfx包,该包具有负责旋转和缩放位图的模块SDL_rotozoom。
答案 5 :(得分:3)
许多人都说过。 SDL处理的不仅仅是渲染。除了处理音频,输入和所有其他好东西外,它还可以让您访问许多您需要自己实现的功能,从而简化图形的使用。 所以,SDL是OpenGL之上的抽象层。您仍然可以在应用程序中访问OpenGL,因此可以使用它的全部功能 一个简单的补充,因为您似乎是这种API的新手:如果您想要一个类似于SDL的API(对于2D图形),我建议您查看SFML。它基于C ++而不是C具有旋转等功能。它也基于OpenGL。 :)