Category: Home
What to expect in a (game) programmer interview
I didn’t want to jinx it but I’ve been working full time at Gearbox Software as a graphics programmer since August :D I interviewed with a few game developers before ending up at Gearbox and I wanted to share my experience in a vain hope that someone might avoid getting burned in his first interview at his dream company or for a dream position. Thankfully my first real interview where I got burned was not for a job that I would have jumped at without hesitation, which gave me a heads up on how to prepare for the coming interviews.
In my very first full day on-site interview I had a 2 hour coding test in a closed room on a computer with no internet connection and nothing but Word installed. The test consisted of various challenging coding problems that I was expected to solve in C++, from algorithms to bit twiddling to physics. I finished before the time was up and had lunch with the HR rep while the programmers reviewed the test. I aced the test and was brought in for further interrogation. They started off talking about the test, why I did this this way, what are some other ways to solve this problem, can this be done faster, etc. After about an hour of that they brought in a new set of people that asked me technical questions related to the position I was interviewing for (I actually didn’t even know what position beforehand, they had contacted me and asked me to come) for about an hour. Questions were all over the place, ranging from performance to graphics to how emerging technology could be applied to existing products. The last set of people came in and asked me more HR related questions such as why I wanted to work there and all that routine stuff. The interview concluded and I got a brief tour of the company before taking off. In all phases of the interviews I was given the opportunity to ask them questions.
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:
Imagine Cup US 2010
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.
Ray to Ellipsoid Intersection
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;
}
} |