I have been studying SDL for a few weeks and I have succeeded in making a 2D Ping-Pong game, but I want to get started in 3D development, and I'd like to know if SDL is capable (and suitable) for 3D game development, or I must use OpenGL?
closed as off-topic by Alexandre Vaillancourt, Kromster, Byte56♦ Jul 10 at 20:24This question appears to be off-topic. The users who voted to close gave this specific reason:
|
|||||||||||||
|
SDL isn't a 3D graphics engine. As is stated in its homepage:
That "3D hardware via OpenGL" basically means that SDL contains some helper functions to ease cross-platform usage of OpenGL, but you'd still need to learn and code raw OpenGL (which isn't a bad choice if you want to better understand 3D graphics). If you'd like a higher level approach, you should look at some complete 3D engines, such as Ogre or Irrlicht. They use OpenGL underneath (or Direct3D on Windows), but provide easier API with lots of stuff like model loading and scene graph. |
|||
|
SDL by itself is not meant for 3D (you can make your own software renderer but you wouldn't get very far with it) however SDL does come with an OpenGL wrapper/addon so you can use SDL's windowing, audio, and input system while using OpenGL. Refer to the link in the other post (SDL + OpenGL) for more info and use nehe.gamedev.net for OpenGL tutorials. |
|||||||||
|
If you can draw triangles, then you can technically create a 3d engine with it. However, this involves the same amount of math as you need to do OpenGL if not more. First, you need to define positions in 3 dimensional space. This is done by using 3d vectors. To render a triangle, you need 3 vectors, one for each vertex of the triangle. Now, to project a point from 3d to 2d, you just need to divide the x and y positions of the point with the z position. If you done this, then you have a 3d triangle. Congrats. However, if you render multiple triangles, you notice triangles at the back can overlap the triangles in the front. To solve this you need to sort each triangles based on the distance of it from the camera. To rotate a model, you need to multiply each vertex of it with a rotation matrix. |
|||
|