Jump to content
Posted 03 June 2013 - 11:40 AM
Posted 03 June 2013 - 12:00 PM
Direct3D and OpenGL are both low level graphics APIs that, in their modern form, are for all intents and purposes intefaces to the underlying 3D hardware. As such, all this stuff of buffers, pipelines, primitives and so of is very much a reflection of the common theory and practice of 3D rasterization, things that is certainly not a Microsoft or DirectX specific way of doing things.
I think a big mistake beginners make is that they choose to dip their toes into 3D graphics with no real grasp of the underlying concepts, a mistake which is further compounded by choosing possibly the lowest level API that you'll ever use for 3D rendering. This of course results in a big "WTF!?" moment when you decide to take a peek at the docs or online tutorials because suddenly you're bombarded with not only API-specific stuff but also universal rendering concepts thrown in for good measure. I know i was certainly left utterly baffled when I first started out, and this was in the days of the (relatively simpler) fixed function pipeline.
I think you need to have a think about where your interests lie: if you want to learn the low level nuts and bolts of how things appear on the screen then be prepared to do a lot of extra curricular research and learning about the mathematics and concepts of 3D rendering in general as learning the API specifics should really just be housekeeping. If you want to get things up and running as painlessly as possible to make games and the like then IMO a higher level API/engine would be a wiser investment in time as you can add the low level stuff to your repertoire at a later date..
Posted 03 June 2013 - 01:03 PM
Is there something I am missing and nobody actually remembers this stuff or uses some super-duper techniques ?
Also, I see a lot of strategy games written in DirectX, those are typically 2D, Were they created using Direct3D ? If so,then why wouldn't they have an option to rotate the view, could the reason be that they don't have vertices behind the 2D plane thus saving resources ?
And one more question if I may: Does OpenGL also use the same crazy rendering strategy as DirectX ? with pipeline, buffers,swapchains and stuff ?
- the MSDN and DirectX SDK has quite good information about the usage of different function. However, typically the examples are quite context bound and limit them selves strictly to the topic. Seeing the "bigger" picture may be difficult. But even then, the examples projects tend to get rather large.
- Direct3D may be used for 2D games as well. Maybe the camera rotation isn't necessary or it isn't a wanted feature so that's why it isn't implemented. Of course, if the Direct3D api is used to draw strictly 2d graphics, then you can't really have useful camera rotation.
- OpenGL and Direct3D have pretty much the same functionality. The OpenGL syntax is different from Direct3D however. So it isn't just question of different function names.
Posted 03 June 2013 - 01:20 PM
I think GeneralQuery had a great answer. Modern 3D graphics are absolutely not a beginner topic.
For a constructive alternative, you can roll back a few years.
Instead of D3D11, consider going with D3D9. It is from a simpler era, but it still has a great deal to offer. It expects significant knowledge from the programmer and requires some initialization, but nowhere near as much as D3D11.
Or consider going with SDL or XNA or other libraries that do all the managerial work for you, letting you focus on learning how the graphics side works.
Or consider learning a much older and much simpler API such as OpenGL 1.2. You can start off with simple immediate mode triangles and eventually build up as your knowledge and experience grow.
Check out my book, Game Development with Unity, aimed at beginners who want to build fun games fast.
Also check out my personal website at bryanwagstaff.com, where I occasionally write about assorted stuff.
Posted 04 June 2013 - 01:21 PM
Edited by RoundPotato, 23 August 2014 - 06:08 PM.
Posted 04 June 2013 - 02:14 PM
I agree that boilerplate code is a bit intricate, but you wont really need it once you have dealt with initialization phase.