Imagine Cup US 2010 – Conclusions
Well, Imagine Cup is over and we didn’t win :(
Here are a couple of videos from our entry (HD and fullscreen recommended!):
Teaser:
Gameplay Trailer:
Well, Imagine Cup is over and we didn’t win :(
Here are a couple of videos from our entry (HD and fullscreen recommended!):
Teaser:
Gameplay Trailer:
Just got back from the Imagine Cup US finals in DC, late last night.
We didn’t win. In fact, we didn’t even get to the final 4 (out of 10 teams). When we first heard on Sunday, we were fine with it, thought we just didn’t have the quality, but after seeing the final 4 presentation on Monday, we’re… confused.. to say the least.
Our presentation style was very different than the other teams (long demo, no smooth-talking bullshit vs 1-2 min game demo (if that) and all smooth-talking bullshit), but we’re hoping that that wasn’t the cause.
We’re supposed to find out why today or tomorrow.
Took me a while to find a proper/working algorithm for Ray to Ellipsoid intersection that gave me the distance back, so I figured I’d repost it here, perhaps Google will rate it highly! :)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | public static float? RayToEllipsoid(ref Ray ray, ref BoundingEllipsoid ellipsoid)
{
// Source: http://www.ogre3d.org/forums/viewtopic.php?f=2&t=26442&start=0
Ray transformedRay = ray;
transformedRay.Position -= ellipsoid.Center;
transformedRay.Direction.Normalize();
float a = ((transformedRay.Direction.X * transformedRay.Direction.X) / (ellipsoid.Radius.X * ellipsoid.Radius.X))
+ ((transformedRay.Direction.Y * transformedRay.Direction.Y) / (ellipsoid.Radius.Y * ellipsoid.Radius.Y))
+ ((transformedRay.Direction.Z * transformedRay.Direction.Z) / (ellipsoid.Radius.Z * ellipsoid.Radius.Z));
float b = ((2 * transformedRay.Position.X * transformedRay.Direction.X) / (ellipsoid.Radius.X * ellipsoid.Radius.X))
+ ((2 * transformedRay.Position.Y * transformedRay.Direction.Y) / (ellipsoid.Radius.Y * ellipsoid.Radius.Y))
+ ((2 * transformedRay.Position.Z * transformedRay.Direction.Z) / (ellipsoid.Radius.Z * ellipsoid.Radius.Z));
float c = ((transformedRay.Position.X * transformedRay.Position.X) / (ellipsoid.Radius.X * ellipsoid.Radius.X))
+ ((transformedRay.Position.Y * transformedRay.Position.Y) / (ellipsoid.Radius.Y * ellipsoid.Radius.Y))
+ ((transformedRay.Position.Z * transformedRay.Position.Z) / (ellipsoid.Radius.Z * ellipsoid.Radius.Z))
- 1;
float d = ((b * b) - (4.0f * a * c));
if (d < 0)
{
return null;
}
else
{
d = (float)Math.Sqrt(d);
}
float hit = (-b + d) / (2.0f * a);
float hitsecond = (-b - d) / (2.0f * a);
if (hit < hitsecond)
{
return hit;
}
else
{
return hitsecond;
}
} |
Just wanted to post this here in hopes that Google will pick it up and help others that might encounter the same problem since I found absolutely nothing about this on the INTERTUBES.
NvPerfHud crashes horribly every time we try to run it with our game through it. The crashes make little sense, as it is not our executable that is crashing, but csc.exe (C# command line compiler) as well as some other stuff like the windows error reporting mechanism. Other XNA applications work fine however so I knew it had to be something specific to our game. After hours of debugging and talking to some Nvidia guys on their forums, I managed to find out that it was XML deserialization that was causing the culprit. Apparently when C# deserializes an XML file (that we use for settings and particle systems) it creates temporary code in your temporary folder and compiles it to a dll that it then loads to deserialize the XML.
I do however not have a solution for this (yet), we just disabled the component that was loading the XML. This would probably be fixable by precompiling the XML serialization routines, which is possible with some tools (such as Sgen), but they did not work for me due to some weird namespace conflicts, which were a documented limitation of the tools.
2 cold spells, 1 imagine cup and 1 demo day later, this semester is over, the Christmas break has arrived and a quick wrap up is in order.
Cosmopolis was selected as a finalist for the US Imagine Cup which will be held in Washington DC sometime late April. We’ll get shipped up there for a weekend of who-knows-what. With some luck and a lot of hard work, we’ll hopefully break into the international finals in Poland later that year.
Demo Day* was a huge success an enormous failure at the same time. Huge failure because I somehow managed to book my flight back to Iceland in the morning meaning that I’d miss the entire Demo Day, something I did not realize until 2 days before. I need a personal assistant to book my flights in the future. The Cosmopolis demo however was a huge success from what I’ve heard, the best one there by most people’s accounts. Just wish I had been there.
*Demo Day is a dedicated day at the end of the semester where people from the game industry come to USC and watch students present the best projects of the semester for almost an entire day.
With that in mind, here is what matters, the videos presented at Demo Day. Keep in mind that these are probably unnecessarily long, intended for someone to be talking while they are playing. Maybe we’ll put up annotations sometime. The videos are in HD, so fullscreen + HD is recommended.
What I specifically worked on in this is pretty much the programming of everything you see (and don’t see, ie core engine stuff) except the animation system. I wrote all the shaders and pretty much everything graphics related (vegetation, terrain, water, time of day, shadows, particle system, etc), as well as a big part of the gameplay (including network) for both (sub)games.
Cosmopolis: United Nations Millennium Challenge.
This game (or subgame actually) was our Imagine Cup submission, although the graphics have been improved a little bit since our original submission. The premise here is that you play as a United Nations officer trying to build up a war torn nation. The specific gameplay that we implemented was de-mining. You have a mine detector and a map at your disposal and take a part of a collaberative and persistent de-mining efftort, where individual score is kept track of. The mine detector is sound based and and once you have locked down the position of the mine you throw rocks at it to blow it up.
Cosmopolis: WarPipe.
This subgame is compltely different from UNMC and is meant to be used for research purposes in the near future. Right now the gameplay is pretty much just a free for all killfest involving an assault rifle and 3 types of grenades (smoke, flashbang and frag). Teamplay is the #1 thing to add in the next semester.
Cosmopolis: World Tools
This is just a demo of the tools we used to create the Cosmopolis world.