   My game dev library
  I am making a game development library (more like a few classes to help with it). I already have 3 class: GLVector, GLNormalVector (derived from GLVector), and GLFileWriter. I''ve trying to think of a few more components to add to it, but can''t think of anything at the moment. Any help would be appreciated. Thanks in advance.   /*I use DirectX 8.1 and C++ (Microsoft Visual C++ 6.0 Professional edition)*/ 
  You could have a class to set up lights and textures.   I don''t have to do nothing but live and die, everything else i choose to do- I don''t know, but my dad says it alot ;  I don''t now if this is going to be 3D but a GLMatrix class might sound good, and a GLCamera class to setup your view transform.    Sam--Tread Wars - Tank Battle gamePowered by SKEnginehttp://www.highendgaming.com ;  Just out of curiosity, why the difference between Vector and NormalVector? It seems to me, you''d be better off implementing a single Vector class that has all the functionality you need to represent vertices, vectors, normalized vectors, etc...As codeguy suggested, it might be nice to have a Matrix class; as a corrollary to that, you could also implement a Quaternion class. You can argue their usefulness all you want (some people prefer not to use them at all), but a lot of pre-made game model exporters for modelling packages export skeletal animation data as quaternions, so you should at least have enough to convert a quat to a matrix and maybe back again. Full quat functionality can come in very handy. Of course, that can come later if you are still relatively inexperienced with 3D.You may also want higher level abstractions such as Meshes or Models, to encapsulate chunks of vertex data and other state. Could possibly be sub-classed into categories such as Static Mesh, Animated Mesh, whatever... depending on your architecture/design.Some standard, generic image loading/saving routines could be an addition. Image data needs to be loaded somehow, and it is nice to be able to save screenshots as TGAs or PNGs or JPGs. All of these routines could be easily lumped into an interface class.You could write wrappers for interfaces such as sound, input handling, window creation and destruction, etc... to keep from having to repeatedly construct complicated initialization code blocks such as declaring/registering Windows classes, building rendering contexts, constructing message handlers, etc...You could construct a class(es) for profiling your engine to identify performance bottlenecks, reporting on flaws or possible problems such as memory leaks, allocating and handling of resources (image data, sound files, you name it). It is considered by many to be bad style to pass these resources around as pointers, so many folks implement centralized resource managers to handle the safe construction/destruction/reconstruction of these assets, handing out handles or references rather than actual pointers.You could construct a framework for task scheduling and your main game loop structure.Check superpig''s most excellent Enginuity series for some ideas on organization; he writes with generic interfaces and flexibility in mind, so most if not all of what he does can be extended to use in any game. Good stuff there.Good luck, and have fun.  GolemBlender--The Gimp--Python--Lua--SDLNethack--Crawl--ADOM--Angband--Dungeondweller;  GLVector has 3 float values in it, representing the position, while the GLVector is derived from GLVector, and has an additional 3 float values, representing the direction. I just made it for convenience. Thanks for the ideas guys! One question though, how (and what) would I use a matrix class. I use D3DXMATRIX (or atleast I''m learning to), and I use the D3DX functions. I know matrices, and operations on them (addition, multiplication, etc).   /*I use DirectX 8.1 and C++ (Microsoft Visual C++ 6.0 Professional edition)*/ ;  Question: Why you prefixing everything with GL, and why are you making your own Vector class, when your using DirectX anyway? ;  GameLib = GL. Just until I can come up with a name. And I''m making vector classes because I can implement some stuff, that I''m still working on, into them.   /*I use DirectX 8.1 and C++ (Microsoft Visual C++ 6.0 Professional edition)*/ ;  A general Matrix class could use the basic type for a Direct3D matrix as its base internal format, and would supply operations specific to matrices: multiplication (concatenation) of matrices, transforming a vector, conversion to a quaternion representation, taking the inverse, taking the transpose, setting to identity, etc... Some of these operations may be just inlined wrappers for relevant D3D calls if you wish (being an OpenGL man, I am unfamiliar with whatever operations the D3D API specifies, so I can''t say which calls these are).Some matrix operations can get wierd, and it is nice to have a neat little class, with overloaded mathematical operators, to save on a lot of typing and tidy things up a bit. For instance, the operator * can be overloaded for both Matrix and Vector types, the Matrix version performing a matrix multiply and the Vector version performing a vector transformation.Other operations can be specified to create various matrices based on a number of different models: Euler angles, angle-axis, azimuth-elevation, from a quaternion, construction of view or projection matrices from LookAt/Up vectors or viewport specs, etc...An example of when a Matrix class might come in handy would be skeletal animation. In skeletal animation, a model is stored as a Mesh and as a set of Bones, where each Bone is represented by a pose (usually a quaternion/translation combination per bone). The simplest way of performing skeletal animation while minimizing texture/material state changes is to iterate through the hierarchy of bones, concatenating (multiplying) the matrices for each bone in the chain as you go along, and stashing these matrices in a list or array. Each vertex has a reference to the bone(s) which affect(s) it, and the matrix can be retrieved to transform the vertex when needed during the transformation stage.   GolemBlender--The Gimp--Python--Lua--SDLNethack--Crawl--ADOM--Angband--Dungeondweller;  Why write this low-level stuff from scratch?  And don''t tell me "to learn".  You''re much better off getting a good open-source math (etc.) library, e.g., check out the one released by ILM (OpenEXR).  You''ll have a solid base to build on, and you''ll learn more from using and studying well-written code than hacking something together on your own. ;  By the way, 3 floats to represent a position is a ''point'', not a vector. A vector, by mere definition, is a point with direction so you could have your ''point'' with another 3 floats describing the direction from that point if you wanted, but to be even more accurate you can assume that a vector specifies just the direction from a relative point, so you could have point(1,1,1) being the position and vector(1,1,1) being the direction from that point. This is good because the vector has been separated from the positional aspect. 