Jump to content
  • Advertisement
Sign in to follow this  
  • entries
    34
  • comments
    36
  • views
    15767

3D engine? Panic not!

Sign in to follow this  
MotionCoil

382 views

So, its been a few hours since I last made a post in my journal but screw it; its a new day here in england and I still feel as shit as hell (interesting concept there).
On monday I picked up a really nice virus from my Deli-Krew-Mate Vicky- i think its a subset of flu because it has acheing limbs and temperatures. I keep sweating the damn temperatures down but then they come back. Oh well, means I got time to sit home reading up on random crap instead of going off to work.
After quite a bit of (legit for once) drugs I do feel better and can manage some coding [smile].

Anyway, I'm gonna stop complaining.

I was looking at a few other blogs and reading through their engine woes and stuff. It got me thinking how I was actually approaching such a complex project as a 3D engine. I wondering if anyone else followed this idea with their engine (if this is their first engine):

I don't look at the engine as a whole- ofcourse I have an idea of what I want out of it in the end and the features I need. However since this is my first engine I don't know how to do every feature. So instead of overloading my brain and thinking 'shit, how am I going to code all this' and panic and then lose interest I am taking each section as it comes. For instance, first I wanted to load up levels but what type of level? a 3D level. What type have alot of documentation and a loader/renderer already in place to base ones code on? BSP- its quite simple to load the initial level but collision detection can be a real pain in the arse. Luckily there is code in place and I can go back to collision detection and properly understand it when I need to.
This tool also taught me fonts and how to display different kinds of fonts on the screen and how to make a font code base.

So now I have my level and loader/renderer sorted out- thats now my 'world view' tool. A complete program in itself. What next? Well, I wanted to get the mesh code sorted out so I went to look through one of my Game Programmers books and found MD2 code for meshes- its good because theres documentation and I can update it to MD3. So I made a seperate tool called 'Model View' that loaded MD2 meshes (havn't upgraded it yet). This app also used the font code base from the 'World View' tool to display information.

So I had a mesh view tool, a world view tool, what next? I felt I needed more control over the engines environment (change system variables, load meshes and BSP levels etc.). What better way to control the engine from inside the engine than a developers console. So I made some graphics for it and decided what the initial commands would be for the console. I came up with an input method and a logic system for the console that allowed full control over the environment. So now I had a fully working, independent, class based code base for a console that I then incorporated into my other tools to display debug information, dump error messages and allow me to contol the world.

So now I wanted to make a fully working GUI to easily display information and edit information. Once I got a basic window system with a button widget and label widget to display and work as it was meant to in the 'World View' app (since thats the main basis for the rendering of levels) I wanted to make it more powerful. I wanted to be able to control windows in an external resource to import into the engine since engines are meant to be totally modular by their very nature. So I created a file type that had a template on loading in information for the window to display so the engine could just query the resource instead of having it hard coded. This had many benefits including not having to recompile the engine everytime I wanted to change a window and also allowed for the next stage.

Now I had made the initial primitive GUI system work on a modular resource engine I decided to make the creation of windows easier. So the next natural step would be to make a GUI editor which is where I'm at at the moment (see my pervious post). I can edit windows with my GUI editor and have my World View tool import them when needed.

I'm sorry it was a bit long winded; I got a little carried away. What I am thinking is, is my method the same as most of you out there on their first engine. I take each section of the engine, make it into a little program and in that way I am making it into a whole learning experience. Before I started, I had no idea how to display fonts, make GUI etc. but because I'm taking every aspect of the engine, no matter how small, as one little code base and one little application I am breaking it down and making it easier to learn and code. I am not looking beyond the current section of the engine since it is a project unto itself. However, once I finish a code base I incorporate it into all the other tools of my engine so I know they all work together without problems.
This way i'm not in a panic that I have so much to learn.

Just to lighten the heaviness of this entry...heres a manga hitlar (created by the Face Transformer and Rob Loach's hand picked image of Teh Hitlar Himself)

Sign in to follow this  


4 Comments


Recommended Comments

That's somewhat how I do it except for a few things.
For example instead of having one big blob like "World View" I would devide that into many smaller blobs. So wold veiw would then become: TextureManager (a tool that would take care of loading textures and unloading them), Gemoetry (loading the gemoetry of the BSP or whatever), etc.

Share this comment


Link to comment
thats a pretty good idea actually...
hmmm, might look into that (you havn't patented that idea yet have you? [smile])

Share this comment


Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!