Main differences from original code: -Runs great with OpenGL (original code was for D3D only)
-Able to render each mesh's skeleton
-Each mesh from the Assimp scene get's it's own animator and bones instead of concatenating all the geometry in one single object (i.e. Bob's sword is a separate mesh. So is his head :P; great for Frustum Culling of large objects with a lot of meshes)
-Code remains API independent as all matrices are properly transformed for each rendering API (Direct3D/OpenGL).
-BoundingBoxes are only recalculated once per animation frame and then cached
-The skeleton is calculated once per frame then cached
This update also added support for glVertexAttribPointer based VBO's and Index Buffer Object based rendering.
For a final's exam this semester, I had to develop a multi-agent system that could play team-based 2-on-2 tenis (with a soccer ball) and came up with this:
It's just the first test of the AI Framework used to create multiple agents for single or team-based interactions. Just a test of visual sensors, communication, coordination and stuff like that. Also a test of thread safety for the SceneGraph as each entity's local transformation matrix is modified by the AI thread and rendered in a separate thread. 3 threads, one pointer :) Some shadow artifacts occur during mid-video, but that's due to the not yet finished PSSM system I'm working on. Also. don't mind the complete lack of animations :)) I have better things to code for now. Performance is choppy due to the Profiler from VS2010, Fraps, the code being compiled as a debug build, shader failing on the ball. Also, the quality is low as this video is used to pass my AI exam, and I don't have a lot of time to waste on compression.
The PhysX part:
nVidia released the 3.x iteration of it's PhysX SDK which you can read about >>here<< so I thought of adding it to the framework. Specifically the 3.1.1 iteration (info >>here<< ) After some long coding sessions, the API was up and running, driverless and really fast. Only simple box-collisions for now, but it proves that the API is syncing data with the SceneGraph nicely and in a thread-safe manner:
The water transparency stuff:
Water wasn't really transparent, because 2 very important states, culling = off, blending = on, weren't set correctly while rendering. This was due to the absence of a Render State Manager and a Render Queue. Everything was rendered via a recursive callback on the SceneGraph. Adding a Render Queue sorting method and some minor changes to the State Manager, I finally managed to properly switch states and render transparent objects in a back-to-front order. The result? Well, semi-transparent water:
Well, water is up and ... flowing :) Reflections are working nicely and so are caustic effects. Refractions are good but transparency needs tweaking. The hard part's over:
And shadow map generation is getting better and better. Only directional lights are working for now, but still:
Now that the engine supports some more rendering eye-candy, back to logic behind the scenes. SceneGraph implementation is buggy, crash-prone, Resource Manager doesn't work, Mesh - SubMesh <-> SceneGraphNode parent <-> children conversion not working etc. But ... things are looking promising for the future.
Been working on fixing water rendering issues (water plane Y-position keeps changing with camera movement) and ended up adding PostFX ;)) I'll post the water issues later (when I find a fix for them, so that I don't seem stupid for missing something obvious), but the post processing engine was needed for underwater rendering. So, since the code was already written, why not have some fun with: Anaglyph rendering:
Bloom: Now, Depth of Field is already implemented, but depth calculations are still buggy and the image is just too blurred. Will fix that later. On another note, just signed up for the GameDev section of this: ImagineCup
Cookies are short reports that are sent and stored on the hard drive of the user's computer through your browser when it connects to a web. Cookies can be used to collect and store user data while connected to provide you the requested services and sometimes tend not to keep. Cookies can be themselves or others.
There are several types of cookies:
Technical cookies that facilitate user navigation and use of the various options or services offered by the web as identify the session, allow access to certain areas, facilitate orders, purchases, filling out forms, registration, security, facilitating functionalities (videos, social networks, etc..).
Customization cookies that allow users to access services according to their preferences (language, browser, configuration, etc..).
Analytical cookies which allow anonymous analysis of the behavior of web users and allow to measure user activity and develop navigation profiles in order to improve the websites.
So when you access our website, in compliance with Article 22 of Law 34/2002 of the Information Society Services, in the analytical cookies treatment, we have requested your consent to their use. All of this is to improve our services. We use Google Analytics to collect anonymous statistical information such as the number of visitors to our site. Cookies added by Google Analytics are governed by the privacy policies of Google Analytics. If you want you can disable cookies from Google Analytics.
However, please note that you can enable or disable cookies by following the instructions of your browser.