Sunday, February 15, 2009

.net and tools

After dare i was working on my master project. During this period, i have studied .NET developement from my friend and flatmate Benjamin lassort(You know you are a great man). He also introduced me an excellent dotnet component weifengluo dockpanel, and the way to render 3D content into weifengluo.With the help of this we can surely develop tools looks like visual studio. Many thanks to my friend to lead me to the way of dotnet and tool development.

I did a small tool for my master project,  gesture recognition using the wii remote with a neural network approach. Basiclly, it's about using a wii remote to draw some shape on a black panel,the
neural network algorithm will then calculate and find the matched result, the character output the matched action at the end.
After dissertation submission, i went back to China. Now i am rewriting this tool, changing it to a 3d editor. Here is the screen shot of this two week's work. I managed to add move,
rotate,scale axis,model view.Also it supports multiple scene managers and each scene manager can has multiple render windows for adjusting camera to different positions. There are quite a few problems when dealing with manipulating objects in different scene manager's different render window. But i test a lot on every step before go forward. On some important steps i drew figures on the paper to make a clear plan. Thanks to the patient it works fine now. I will add as many features as possible later. 


Saturday, February 14, 2009

World of Champloo

This is the game we presented in EICC (Edinburgh International Conference Centre) for the daretobedigital competition 2008.With only 2 programmers, 3 artists in the team, we managed to complete this game with split screen and networking two versions in less than 2 months.
Game Trailer:

Networking game play:

You can watch series of videos on youtube:
There are old versions downloadable on the showcase of daretobedigital website(year 2008) :

My work include:  framework, graphics, gui, networking.

SDKs been used:
Ogre engine: absolutely the best choice for graphics rendering with the best c++ software design structure I've ever see.
Physx Engine+NxOgrePhysx is a very good physics engine with visual debugger to use.
NxOgre make it much easier to use with Ogre engine.
OpenAL+OgreAL: same as physx+nxogre, but some sound bugs happen for some sound card. don't know why at the end.
CEGUI:wonderful gui library with two main tools: layout editor, image editor(too many bugs for image editor). with this i implemented particle effects on gui panel when special ability is ready.
Raknet:  Easy to use, with this no need to focus on the low level networking technology, but implement a high level message sending system. A nice lobby, with UDP broadcasting functionality to find all the local machines automaticlly, also was implemented. 

Lessons i learned:
Attach/detach billboard animation ball to physics ball and make them moving with invisible bone to implement picking, throwing, special skills of character, this is not so hard and get a very good effect, for example the water race's final skill has a billboard ball scale and go inside her head. 
In single play version,when player pick up a ball, i found the physics ball bouncing towards the invisible physics plane. Because we were in a hurry, i didn't try too much time then changed another way to solve this problem. That is when players pick up a ball, disable the collision of the physics ball and delete its attached animation, create a new billboard animation moving with the invisible bone in picking,holding,shooting action.After shooting action delete this animation and
attach a new billboard to the original physics ball to shoot it out. However when moving to the network version I remember i kept adding messages at the end to fix all the bugs that led by this method.For synchronizing a special ability 5-6 messages have sent to fix all the bugs in different situations.
Recently, i found actually there is some way to move the physics ball with bone and not collide with the floor. If i can spend more time before, lots of problems will not happen in networking version and the application can become much efficient.
Coding in a hurry, trying to use tricks is making troubles for myself in the future.
When a problem happens, a quick trick or idea to fix may not be the best solution. There always has an easy and suitable way to go but hard to find.I 'd rather spend 10 days to find the entry of the simple way than immediately choose a hard way to go.We need best algorithms, however we also need to make things as simple and straight as possible. Never use tricks to avoid problems, find a good method to solve it.