90 likes | 227 Views
Antigone Engine. Introduction. Antigone = “Counter Generation” Library of functions for simplifying 3D application development Written in C for speed (compatible with C++, can make bindings for other languages) Wrappers for commonly used OpenGL functions Data structures for semantic objects.
E N D
Introduction • Antigone = “Counter Generation” • Library of functions for simplifying 3D application development • Written in C for speed (compatible with C++, can make bindings for other languages) • Wrappers for commonly used OpenGL functions • Data structures for semantic objects
Implemented Features • Load, animate, and render MD2 • Load textures from a variety of formats • Efficient camera management • Frontend management (GLUT, SDL) • Input API • Debugging tools
Planned Features • Separation of rendering functions from data • Loading geometry in BSP formats • Efficient collision detection • Progressive level of detail meshing • Better animation control • Multitexturing, environment mapping, bump mapping • More support for model formats
Internal Structure • Engine is abstracted from some routines • Two static libraries: • libmala (multivariable and linear algebra) • Types for vector, plane, quaternion, matrix (3x3,4x4) • Some numerical analysis methods • libhemi (half edge mesh interface) • Loads MD2 format mesh (more in future) • Will have mesh operations for half edge meshes • Will have more mesh types (for optimizations)
Debugging Tools • Assert – ASSERT(a==b, “A not equal to B!”); • Logging – wrapper for fprintf • Profiling – measure speed of predefined blocks of code (print min, max, average ticks): startSample(“Loop A”); for (int i=0;i<100;i++) { x=x*sqrt(y); } endSample();
Design Considerations • Speed, Speed, Speed! • mesh rendering optimizations (triangle strips) • data structures (balance with memory constraints) • Backwards Compatibility • once API reaches some point, updates may deprecate but not remove interfaces • Modularity • should be able to easily add new systems (which operate efficiently), for example, sound and network
Problems • Feature creep, especially with formats • Need to generalize data structures as much as possible • Compatibility • Defining multiple frontends and input systems • OpenGL extensions / Hardware capabilities • Support for those who don't have library X • Lack of documentation on formats
Research Goals • Experiment with data structures • Linking meshes with texture objects • Flexible texture objects for multitexturing, mapping techniques • Collision models (BVHs, AABBs, OBBs) • How to store animations • Localized collision maps • Experiment with intermediately or simultaneously rendering to a mesh (for collision, etc.)