I want to learn the fundamentals of programming 3D graphics from the bottom up. I don't necessarily want to learn DirectX or OpenGL at the moment, but to truly understand what is going on below the surface. I want to start by implementing a basic ray-tracer. It seems simple enough and there are even tutorials online for it.
After this I want to implement in software outside of DirectX or OpenGL a graphics pipeline. Is this possible or will I be trying to walk through a brick wall. They do say the best way to learn is by doing.
3D graphics is a big area and to answer your question really requires a bit more information on what your goals are.
Writing a ray tracer is definitely a good way to learn some 3D graphics fundamentals. DirectX and OpenGL are of course designed to talk to hardware accelerators for rasterization based 3D rendering so if you really want to understand what's going on at the low level in the sense of how a 3D graphics card produces images of triangles on a screen then writing a software rasterizer would be a good exercise.
If your interest is more in the fundamentals of how to render a realistic image of a 3D scene however then I wouldn't necessarily advise focusing on the details of writing a rasterizer. I'd instead focus on learning more about things like lighting, shading, shadowing, reflection and refraction and global illumination. All of these things can be implemented relatively straightforwardly in a software ray-tracer, much of the complexity comes from trying to make them efficient rather than in the fundamental principles.
If your goal is more to understand how 3D hardware works at the low level, that is a whole other large topic of its own. There are good resources out there to learn about that but writing a software raytracer won't necessarily be as helpful if that is your goal.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With