Jonathan Hurtado

Video Game Programmer – MSCS

The following is a list of projects that I worked on while studying at Digipen Institute of Technology.

In December 2010, I successfully defended my thesis, Finding Strategies to Solve a 4x4x3 Domineering Game. To better understand what my thesis is about, I first need to introduce the game, Domineering.

Domineering is a two-player combinatorial game where two players play on a grid board (similar to a chessboard) of any size, placing domino pieces that cover two spaces on the board. One player can only place pieces vertically on the board; the other can only place pieces horizontally on the board. Each player take turns placing a piece on the board until one player is no longer able to place any more pieces, resulting in a loss for that player. For an example of how Domineering plays, you can download my C# Domineering prototype. This prototype allows you to play Domineering on a 8×8 board against another player or a computer opponent.

To solve a Domineering game, one must find a winning strategy for each turn order of a Domineering game. A winning strategy is one that a player can use that will guarantee victory regardless of how the opponent plays. The largest sized board that was solved is a 10×10 board by Nathan Bullock.

continue reading…

For one of my computer animation assignments, I implemented an inverse kinematics solver that uses the cyclic-coordinate descent (CCD) algorithm.

In my application, the model walks towards a point set by the user.  Upon reaching the point, the model stops and attempts to move his hand towards a floating target using an iterative CCD algorithm.

Other features of this animation engine include:

  • loading an animated FBX model into the application
  • using a custom Vector-Quaternion-Scalar class to handle hierarchical transformations of a model
  • moving an animated model along a curved path

Screenshots

The following screenshots are from the IK implementation of my engine. Each thumbnail links to a larger version of the image.

Code Sample

Download my CCD Code Sample (zip file).

This C# application I developed generates a curve based on user-defined points.  These points are treated as either control points or interpolated points for the curve depending on the curve algorithm set by the user.  The points can be moved after they are set, allowing the user to modify the curve in real-time.

The following curve algorithms were implemented in this program:

  • Bezier Curves – NLI Form (De Casteljau)
  • Bezier Curves – BB Form (Bernstein polynomials)
  • Bezier Curves – Midpoint Subdivision
  • Interpolated Polynomial (Newton Form)
  • Interpolated Cubic Splines
  • B-Spline (De Boor)

Screenshots

The following are screenshots of my Curve Editor. Each thumbnail links to a larger version of the image.

In this C++/OpenGL project, I implemented a KD-Tree data structure that spatially partition the boxes in a 3D scene so that they can be efficiently culled when they are outside of the view frustum.  This culling optimization is done with a plane coherency test, which reduces the number of checks between the plane and view frustum.

The application indicates how many boxes are outside the view frustum, how many boxes are intersecting with the view frustum, and how many plane equation evaluations are being calculated by the view frustum culling algorithm.

Screenshots

The following are screenshots of my KD Tree implementation. Each thumbnail links to a larger version of the image.