Thank you, both, for your replies. They are greatly appreciated.
As far as reading materials go, I am very happy with the books and tutorials I have already sourced.
What I am interested in finding is a set of problems to exercise my grasp on the knowledge I've gained from the reading materials.
Some example exercises may be:
- Write a program that renders a cylinder that meets a specific set of parameters (easy with a framework, harder without).
- Write a program that renders a pyramid that meets a specific set of parameters.
- Write a phong shader.
I understand the advantages of utilising a framework such as ThreeJS. However, in this case, I am not trying to make a game. Rather I am learning Graphics Programming. To this end I want to go closer to the metal.
However, your comment has helped me further understand the concept and for that I am grateful. Your description of how they would not clear the depth buffer before drawing the water but instead copy in the depth buffer of the environment for comparison against those of the water plane drove it home for me.
Your insights into the rendering process have given me a great appreciation of how a scene is rendered. I find it hard to believe how many calculations must be going on under the hood to do a raycast for each pixel on the screen against each triangle in the scene each frame and every frame. It does all this and runs at 60fps!
Mind = Blown
Obviously there must be optimisation strategies to only do tests that make sense (like spatial partitioning?), and maybe not recalculating depths for an object that has not moved if the camera is static (Though this wouldn't help keep a solid framerate whilst the camera is moving). And many other things I wouldn't even think of.
Thank you for all your time in trying to make sure I understand the concept. It has been very valuable. But I feel as if I am only becoming more and more curious ;P