In this period I’m working with the concept of a new framework because I decided to abandon the Unrelated Framework. If you don’t know what I’m talking about, basically the UF is a framework I coded for years and the one I used to create all the apps you can find on this web site. It has support to open sys windows, opengl, directx, manipulate images, load and save 3d models, etc., just using few functions. Anyway, because the huge amount of extern libraries and deficiencies in the serialization format, it has portability issues and sometimes serious problems with speed. I decided to code a new framework from scratch, it will be cross-platform since the beginning and to pursue this task I decided to install several virtual machines on my host, in order to support everything (or nearby). I started yet supporting Windows, MacOSX and Linux (OpenSuse, CentOS, Mandriva, Ubuntu, Fedora and all the major distros). Probably I’m gonna make only a new core with the basic functions to handle math, serialization, zip compression, etc… and I release it with a LGPL license.
I tried to implement the explicit multisample antialiasing and I got good results, but it’s slow on a GeForce 9600GT. A scene of 110 fps became 45 fps with only four samples, just to point out the slow down. While I was jumping to the ceiling for the amazing image quality of a REAL antialiasing with deferred shading (not the fake crap called FXAA) I fell down to the floor after I seen the fps, what a shame.
Anyway, I decided to change from a deferred shading to a deferred lighting model just to implement a good trick in order to use the classic multisample (that in my card can do pretty well also with 16 samples!) reading from the light accumulation buffer in the final step and writing the geometry to the screen with the antialiasing enabled. The result is a little weird, but you can fix it by using that crap fxaa on the light accumulation buffer which is smoother than the other image components. For example, I can use: a mipmapping or anisotropic filtering to eliminate the texture map aliasing, a FXAA to eliminate the light accumulation buffer aliasing and finally a MSAA to eliminate the geometry aliasing.
ps: I used the nanosuit model from this site: www.gfx-3d-model.com/2009/09/nanosuit-3d-model/
This is the first “work in progress” video of my 3d engine called Unrelated Engine. Some complex animated models come from Doom 3. They were converted to a maximum of 4 weights per vertex as well as the identical vertices have been cancelled to improve the speed. The shader language was used to obtain a large amount of skinned meshes and complex materials with a reasonable speed.
The 3d models are from doom3 and from http://www.models-resource.com/, they were used only to test my engine and to make this video. The rights of these 3d models and the music are reserved by their respective authors.
I created a nice video with an engine that I’m still developing and that is part of my Unrelated Framework. It uses:
- OpenGL (to draw the graphics)
- DevIL (to import images)
- Assimp (to import 3d models)
The 3d models are from http://www.models-resource.com/, they were used only to test my engine and to make this video. The rights of these 3d models and the music are reserved by their respective authors.
OpenIL is a library with very powerful image loading capabilities and I decided to include it in my framework. My standard can handle several image formats like the classic 8 bit RGB or more advanced formats like 16 bit RGB or High Dynamic Range. The images are imported from file and used maintaining the original format (if it’s possible). For other feature check OpenIL official web site (http://openil.sourceforge.net/)
This is an example of how it works in my framework:
C_Image *newImage = new C_Image();
//load from file
newImage->ImportFormFile(”test.jpg”);
newImage->ImportFormFile(UF_FILE_JPG, “test.jpg”);
//export to file
newImage->ExportToFile(UF_FILE_HDR, “test.hdr”);
//set file format jpeg compression
newImage->SetFileFormat(UF_FileFormat_JPG(50)); //the image will be saved in my format with a jpeg quality of 50
newImage->SaveToFile(”test.img”);
Gianpaolo Ingegneri
Copyright @ 2010 – All right reserved
The Unrelated Framework got support for ziv-lempel compression of data using ZLib. The classes can be compressed in memory, loaded and saved with few rows of code and without limits. For example:
//this works only with resources like images, fonts, sounds, etc…
C_Image *newImage = new C_Image();
newImage->ImportFromFile(”test.tga”); //load image from file
newImage->SetFileFormat(UF_FileFormat_Zip(6)); //set a zip file format of 6th level
newImage->SaveToFile(”test.img”); //save the zipped resource on file, simple isn’t it?
//if you want to load…
newImage->LoadFromFile(”test.img”); //the system understands that it was zipped
newImage->SetFileFormat(NULL); //set it NULL if you don’t want the zip compression in the future
or
//this can be used for every kind of object
C_Image *newImage= new C_Image();
newImage->ImportFromFile(”test.tga”); //load image from file
C_Object_Zip *objZip = new C_Object_Zip(); //init a zip container
objZip->CompressObject(newImage, 6); //compress the image object
objZip->SaveToFile(”test.zob”); //save the zipped object on file
delete newImage;
//if you want to load…
objZip->LoadFromFile(”test.zob”); //load the zipped object from file
newImage = (C_Image *)objZip->UncompressObject(); //get the uncompressed object
delete objZip; //delete and free the zip object memory
Gianpaolo Ingegneri
Copyright @ 2010 – All right reserved
Finally I completed the GUI of my framework. The best feature is that the Gui can work in two modes: via software or using the OpenGL. It’s very helpful for cross platform compatibility, for video games or other OpenGL purpose.
The Gui is in his first version but it has all the widgets necessary to create professional applications. An interesting feature is that you don’t need to program a single row of code to create particular interfaces: with the Gui Editor you can easily project all kind of professional interfaces and load them in your program using few functions. You don’t need to code the widgets to make them work properly. In this way you can save hours of programming.
There is a full list of widgets implemented:
- Button
- Radio button
- CheckBox
- Form
- Frame Window
- FrameBox
- PictureBox
- ScrollBar
- Scroll space
- TextBox
- ComboBox
- Menu
- ListView
- TreeView
- ToolBar
- Image button
- Graphic Api Viewer
Of course the GUI was coded in C++, it’s object oriented and it’s an integrative part of my Unrelated Framework.
Gianpaolo Ingegneri
Copyright @ 2010 – All right reserved
Aquarium 3D is a little demo of an engine that I’m developing for my framework. It uses a multithreading system with a thread for the physic engine and a thread that draws the graphics on the screen: the two threads are perfectly synchronized to maintain the best fluidity possible with different framerates.
The physic engine has a static number of iterations per second, in this case 30. It can obtain a good fluidity of movements also on higher fps of the graphics card (like 75 for example) upscaling the static framerate with a series of trajectory corrections. It uses also OpenGL for graphics,GLUT to open the window and lib3ds to import the 3d studio meshes. The fish models are property of this site: http://toucan.web.infoseek.co.jp/3DCG/3ds/FishModelsE.html
Gianpaolo Ingegneri
Copyright @ 2010 – All right reserved
The project started from a small framework that I coded for the Amiga 1200. Now the project is much more advanced and it has been developed for many years on pc/windows platforms. In the past it was called Ultimate Framework but there were already several frameworks with the same name and I decided to rename it to Unrelated Framework.
Some features:
- Programmed entirely in C++ - Serialization of Classes - Cross-platform design - New image format for digital image processing
- New surface format for computer graphics
- New format for multi channel textures (color, alpha, bump, normals, z-buffer …) - Algorithms studied to work also via software - Proprietary format for bitmap fonts - Powerful procedural generator of textures, static and animated - Wrapper of OpenGL, OpenCV, OpenEXR, FreeType, etc…
- Flexible GUI studied to work via software and via hardware
This framework is still work in progress and I used it to produce many of the software that you can see in this site.
Gianpaolo Ingegneri
Copyright @ 2011 – All right reserved