> This is a great point. Most (all?) beginner 3D programming tutorials start you off with making your own meshes by hand in code and leave loading models from files until far, far later. This, to me, is exactly backwards. The basics of modeling are not hard to teach, Blender is free, and building static, non-mathematically defined meshes in-code really sucks.
Your mileage may vary, but I wouldn't necessarily say that modeling is easy, especially not trying to use Blender. Most beginnner 3D programming tutorials use simple geometric shapes because it is a helluva lot easier to figure out if your lighting is off or your projections wrong when the scene objects are simple. Loading complex models from file is not exactly a piece of cake, either - you either need a fully-featured library with support for models baked in, or to use something like Assimp, or even write your own model format parsers.
We should have "fully-featured library with support for models baked in" already. There is no reason for a beginner to be writing stuff like this from scratch. A scene graph and model loading library are the bare minimum for a beginner.
Why? I've put up a simple renderer (meshes + instances [transformation+material] + camera + default light behind the camera] in ~450 lines of C++ code (+ 50-ish lines of GLSL).
I've done the same for C++ DX9 code, but that was before D3DX was deprecated and then removed in DX11. It's not quite so simple anymore, unless you pull in various third-ish party libraries (usually just open-sourced versions of the D3DX stuff Microsoft cut...)
Your mileage may vary, but I wouldn't necessarily say that modeling is easy, especially not trying to use Blender. Most beginnner 3D programming tutorials use simple geometric shapes because it is a helluva lot easier to figure out if your lighting is off or your projections wrong when the scene objects are simple. Loading complex models from file is not exactly a piece of cake, either - you either need a fully-featured library with support for models baked in, or to use something like Assimp, or even write your own model format parsers.