Okay, it’s been a while since the first time I thought about it : What a wasting of time, everybody’s writing utilities, tools, libs for they own need, forgotting to :
- reuse what have been already made
- share their work in a generic and system-independant way
So, one negative example : - how many OBJ loaders (in Java) have been written since OpenGL bindings for Java first appeared ? 2 for Xith, almost 1 for jME, I don’t know how many house-mades, 1 generic but not shared (see subject about OBJ loading in this section)
And one positivie example (not Java, but a good ex.) : - Cal3D, the famous C++ character animation library is entirely generic, you can use it with OpenGL directly, or different SceneGraphs, or DirectX
So here’s the situation as I see it, say, what is correctly “open & generic & shared”, and what is constantly rewritten : - ODEJava is independant from graphic system, this is good, we will do so with JOODE.
- Vecmath is completely independant, but not maintained… and e.g. jME uses its own math library
- Loaders for graphic file formats (OBJ, 3DS, MD2, MD3, MD5, OFF, COLLADA, and whatever you want…) are always dependant
- Complex data structures, used to store e.g. Mesh(es) or Sample(s) are different for each system
As you may know, I started a project many months ago named Gamma, whose purpose was approximately (because not very well-defined) to “link” all best game libs together, so the average game programmer just need to mind about a unique system. This system proved not to be the best, and now I’m working on a slightly different concept :
- The basic purpose is always to have as many features as possible (but a feature you don’t use shouldn’t slow the app) with extern libs why not, but based on a general “data system” that consist of a set of data classes (DInteger, DBoolean, DFloat, DVector3f, …) that is used to communicate between libs
- The ultimate goal is to (re-)develop these libs entirely based on the data system for efficiency. This would avoid the “always converting data structs” problem.
This is a pretty ambitious project, and can be seen, in a way, as reinventing the wheel (one more time ! talking of the “re-develop libs” part), but I think if we succeed to organize the wh… oh, well maybe not the whole but the major part of the community and… :
- All develop on the same basis : the data system
- Make libs for pretty everything : Loading, Graphics, Behavioring, AI, Physics, Editing (<- generic and very customizable level editor e.g.), etc.
… then it would be a great profit for all developers.
What do you think about that ?
Would you mind about contributing to a project like that ? What would you change ? What are the problems ? Why is it not already made ?
Looking forward for answers,
BlueSky