File Archive

File download


File size:
1 028 955 bytes (0.98M)
Download count:
all-time: 341


	      _________            _____
	     /        /           /     \
	    /   _____/  ______   /       \
	   /   /____   /     /  /        |
	  /        /  /     /  /        /
	 /________/  /_____/  /________/
	 catalyst      of        design


            (the demosystem)

|talsit     : code, dzn  :

|openGL stuff - openGL1.2 minimun please, tested on
|pIII@550+384mb+nVidia geForce2GTS and runs great.
|geForce2 class card (or better) is recomended.
|pIII class CPU (or better) is recomended.
|128mb ram at least.

|email :
|url   :

|It started a long time ago, way over a year ago. caosGL
|is the name of my demosystem, and it started it's actual
|re-encarnation on the 18th of jan, 2001. caosGL stands
|for Computer Animation Operating System Graphics Library
|which is a load of bullshit except that is sounds nice,
|which is what really counts.
|It is the complete source code to all caosGL. It includes
|the maya plug in to export the .caos files, all the code
|classes, a consoleLoader/tester and the caosGLoader.
|In the source files, there should be the relevant credits
|where due. Also, don't expect many comments.
|There is a license in ever file, should you not find it
|You may do with this as you please.
|Notes about this:
| -the zip loader *should* work, but it sometimes doesn't,
|  though i don't know why, it's probably something i did
|  to it.
| -log4cpp rocks, included is a slightly modified version
|  of the 0.2.2, which basically allows you to add as many
|  appenders as you wish, if you don't know what i'm
|  saying, well here's a little explination: log4cpp is
|  a logging system, it allows you to put in logging
|  statements easily and in a very flexible manner, and
|  then, at run time, specify what level logging to do,
|  where to output (stdout, file, nt event system, unix
|  logsys, etc,etc), without modifying the code. Trust
|  me, it's cool!
| -the maya exporter is the worst thing i have ever
|  written. i am very, very, very ashamed of it. but
|  it seems to work great. to use it, you need to modify
|  and load exportCaos-II.mel included somewhere. that
|  script loads and unloads the plugin on every export,
|  so you can recompile the plugin at anytime.
| -the xml scripts are all compliant to caosGL.dtd. if
|  you want, always check the scripts against the dtd,
|  by running them through a validating parse, tinyxml
|  doesn't validate (it's tiny, what would you expect!)
| -the animation curves (cAnimCurve) are the same that
|  maya uses, so any animation that maya creates, it
|  should be played back flawlessly by caosGL. i made
|  an exporter to export curves straight to xml, but
|  it's very lame and extremely useless, so i didn't
|  include it.
|Now to how the system actually works! Everything
|extends from cBaseNode. It has a few staight forward
|methods, like set, get, name, getTypeName,
|getAttributeNames, visit, leave and a few others.
|Internally, the attributes are referenced by flis
|(four-letter identifiers) which is just an int (int fli
|= 'rotX'; // yes, single quotes!), which makes for fast
|construction, and even faster evaluation - if i had
|implemented it properly with a switch case statement (i
|didn't think of it until i was too late) - this is
|thanks to jare!
|NEW in v1.1!: This has been redone totally, it is
|now consitent all through caosGL, and works great,
|using the switch case statement and booleans for returns
|instead of slow strings.
|The newer clases implement the attribute things
|automatically (cImageElement for example), there is a
|corresponding .attribs file describing the attributes,
|and the preprocessor will include the necesarry
|reference to them in the appropiate places, you just
|need to add them in the .attribs file, and then use
|them. One thing about using them, if you create an
|attrib called 'rotX', the preprocessor will put an
|underscore before it, so you will use it like this:
|_rotX = 5;
|The script system will be in charge of assigning the
|attributes at load time, so if in the xml file you
|specify some parameters, those attributes will be set.
|There are 2 set methods one that recieves a string, and
|the other recieves a double. This is done for
|efficiency purposes.
|Now to the object creation. Objects are created via the
|registry (cRegistry). I is implemented through
|templates. At the botton of each non-abstract node
|class (cLayer, for example), you will see a new class
|created, calles XXXXNodeCreater, which inherits from
|cNodeCreator. In it will create an instance of you
|choice of class and return it. And straight below that,
|a static templated instance of cRegisterNodeCreator is
|created. Now, what all this does is register with
|cRegistry a new creator node for creating a class. And
|all this is done automatically, without modifying
|anything. So, to add a new node class, just copy an
|existing one, replace the names, and off you go. This
|also eliminates the need for an include file for a lot
|of the nodes. All the effects are subclasses of cScene
|(which is just a subclass of cBaseNode and the
|interface iDrawable), and none of them have an include
|file - because it doesn't need it!
|All this leads to the fact that cRegistry can create a
|node just by knowing its name, and you can set its
|attributes just by knowing it's fli. There is a tester
|program (in the consoleTester project) which will
|output all the registered nodes, and all its flis.
|This also leads to an extremely easy way of creating
|exporters and consoles, which can modify the objects at
|runtime. cRegistry keeps a list of all the nodes
|created, and you can ask it for an existing object, and
|set it's attributes easily, or get them just as easily.
|The system is a hierachical one, you have a tree
|structure. Only subclasses of cGroup can be root nodes,
|all the rest are added to it. You can also add cGroup
|to a cGroup. When the tree is traversed, the visit
|method will be called, if if returns false, the
|traverse will not descend down the tree, and will move
|on to the next sibling. That what you can group lots of
|things into cLayers (a subclass of cGroup) and say that
|that layer is only active from this time to that time.
|That will save a lot of time in the traverse. If the
|visit method returns true, the cSceneGraph will
|determine if it's a iDrawable, if so, it will call the
|update method, then the draw method. Then it will
|determine if it's a cGroup, and if so, will descend
|down the tree recursively. Then it will call the leave
|method. This is usefull for state or matrix changes,
|for example cTranspose (shit name), when the visit
|method is called, it will do a glPushMatrix, then apply
|the transformations and when the leave method is
|called, it will do a glPopMatrix. When the visit method
|is called, at the cBaseNode level, the animation curves
|will be evaluated and the attributes sets. Texture
|managment. Only jpg images are supported at the moment
|(who needs more?). You get the textures like so:
|cTextureSpace::instance ()->get ("some"); I can be a
|file or just a symbolic name. If it doesn't exist as a
|file, it will create an empty, symbolic texture for you
|to use where ever. This is used in the cRenderToTexture
|class, where a symolic texture is created, drawn on,
|then is used by some other class getting the texture
|with the same name. Flexible, huh?
|Can't think of anything else, really. If you have any
|questions, just ask. (Menuda chapa, eh?)
|Thank you to all those people and things that made it
|visualc++, openGL, stl, bass, tinyxml, zip(Jare),
|nehe tutorial, osg(example), tesla(jpgLoading),
|help(jare,ithaqua,evan,micro,jcl), photoshop,
|maya, soundforge.
|Thank you to all those who inspired me:
|3pixels, addict, anaconda, asd, calodox, centosis,
|chanka, concept, disaster area, exceed, farbraush,
|future crew, fuzzion, glue, hansa, haujobb, iguana,
|mfx, orion, purple, rgba, satori, savage, solstice,
|stravaganza, sunflower, tbl, tdr, threestate, tlotb,
|tpolm, unknown, zonan.
|And of course, thanks to all those that I shamelessly

|v1.0 Initial public release
|     contains all the essential goodies.
|v1.1 Internal rewrite for consistency.
|     Removed heaps of namespaces, now there are only 3:
|     caosGL::core - all the internal stuff, IO, synch
|                    window setup, music, etc, etc...
|     caosGL::gfx  - gfx related stuff, the scene graph,
|                    jpg loading, base nodes.
|     caosGL::effects - effects galore!

| Known bugs: (i'm sure there are more)
|   - Zip reader works when it wants to, dunno why, don't
|     care really, going to switch to rar lib for next
|     release anyway.
|   - animation curves sometimes jumps, but it does so
|     consistently, ei, it's repeatable, not random.

|tALSit de CoD   :: founder
|                :: coder
|                :: gfx (maya+2d)
|                :: dzn

|Bored Ball      :: a 3d animation
|                :: 22nd of july, 2000
|                :: euskal party 8 :: 2nd place
|Leave Me Alone! :: a 3d animation
|                :: 28th of july, 2001
|                :: euskal party 9 :: 9th place
|Monkey Lover    :: a demo
|                :: 7th of may, 2002
|caosGLv1.0      :: a demosystem
|                :: 8th of may, 2002
|caosGLv1.1      :: a demosystem
|                :: 23th of may, 2002

|there is no license, only rules.
|rules are:
| -you are allowed to distribute this only by
|  electronical form, you may not charge anything for it
|  either in monetary value or in exchange for another
|  product or service.
| -this is free software, you will not be charged for it
|  nor will you charge for it. you may not use this program
|  to promote anything except "the scene".
| -if you execute this software, you do so by your own
|  free will (fatalists spare me), and therefore, if any
|  damages occur, the author will by no account be held
|  liable.
| -there are things that are not mine (libjpeg, zlib, etc)
|  of course, those remain the property of the author, and
|  should state so in those sources, if not, email me, and
|  i'll fix it.
| -this file must always accompany the software verbatim.
| -you shall enjoy it.

// eof