As is typical with development, yesterday was a learning lesson about concepts of programming.
It’s fine and dandy taking someone else’s example and using it as your own. But what you invariably learn is you have your own way of doing things which make absolutely more sense than the way someone else does.
Nehe’s OpenGL tutorials are awesome.
But I tend to prefer ‘pushing aside’ the things I have accomplished – and keeping what I am working on directly in front of me.
If you’ve ever seen me in the office, I work the same way.
My desk is utter chaos. It’s because my desk is my file system. Now if I need something, I know right where it is, no matter what it is I need, I will be able to get it faster than you can blink.
It works for me.
And this ‘noise’ – surrounding what I do – which others may think is clutter – is the chaos I actually enjoy working in.
Starbuck’s is actually great for me for that. Sometimes the rhythmic music is annoying and gets to me, so I throw in something random on Pandora – right now it’s Aerosmith, yesterday it was Enya, and the day before it was System of the Down, and the day before it was Avicii, and so on.. This is background noise, I literally tune it out to do my work..
So looking at Nehe’s OpenGL samples, which I went through a preliminary conversion process to make my own – I still cant’ say I ‘understood’ what he did until I started having problems with it.
And when I did. I realized, I gotta start almost from scratch to make it work for me.
This is the problem with 3D engines out there. Whether its’ Blender, Torque, CryEngine, Maya – all come with it a mindset you’re expected to adapt to. Even Microsoft Windows has a mindset it narrows yours focus on, which I dont mind as much – but for the 3D graphics – I was finding the ability to ‘tweak’ the underlying mechanisms to work for me in these packages inaccessible.
And add on to that – the bloat – these programs are huge, take up gobs of memory, and are not kind to machines like this little XP Netbook I am working with.
Yesterday, I showed someone my graphics, and they actually commented:
“Wow. You’re doing all that on that little machine?”
You REALLY don’t need high end machines to do OpenGL programming I am finding. Now I suppose I will test the limits when I bump up the number of objects I use. But that’s the beauty of doing this in C++. I don’t have someone else who’s created a program who has made tons of assumptions on how I am going to use their package and when I don’t – the entire thing breaks down or I am forced to take a path that is more in line with the way they developed things.
So part of yesterday’s frustration was – I started with one single object rotating in the middle of the screen.
I didn’t have to work with viewports and all the complexities of that in order to get it to function because that code was already done for me. So when I tried ‘shifting’ the object’s position off the center point, I discovered the complexities involved with viewport programming.
To try to understand viewports, I then tried physically moving the object by adding moving it with the mouse.
That’s when I ran into perspective issues.
Again, all code that had been done for me, that I hadn’t really messed with because the cool objects were working and texturing in the middle of the screen like they should have.
So this morning, no sonner than I arrived, a man named Sid – who did much of the 3d for James Cameron in the movie Avatar – asked how things are going on my project. I explained.my problem.
He explained how they did it in Hollywood, and how they are constantly concerned about scene depth because of the camera angles and lenses being used, and this is with traditional 2d imagery.
For instance, I wasn’t aware that they deal with ‘wide angle’ shots like streets and the like – with 35 degree angle lenses to get more of the scene. But if you have close-ups, the angle changes, so you’re using 20 degree angles and less in order to get close to your subject.
That was the heart of my problem. I was using a ‘wide angle’ lens for my 3d viewport.
That’s when he struck on the idea for me:
Build the scene first.
I mean. It should have been a big huge duh.
That way, I can learn about the camera angles, rotational and positional information – and lenses to get the proper information about the scene in place before I really dive into pushing things away as ‘done’.
So after that, I remembered the “it’s bigger in the middle” – and started working on taking this rather amazing artistic version of the TARDIS 2D imagery and converting it into a 3d image:
Anyways, today I spent the time creating code for the primary window, and step by step went through the creation of a window and perspective. More on this tomorrow, as I just got ‘debug text’ working on the main screen.
This part of it strangely feels like work. But once I get this grunt work behind me, I look forward to what’s next.
Time to get out of here.