These are somewhat dated (being old enough to have their OWN degree).
You have been warned.
You have been warned.
Creative name, right? This is my first attempt at a FPS style game engine. It involved the creation of both a Rendering engine and a world-building application.
|A camera rendering the ball from a remote perspective|
|An outdoor rendering of the scene|
|A wireframe render of the outdoor scene.|
|Octree representation of the scene|
- An Octree-based scene graph
- Sky boxes with animated clouds
- Spherical collision detection for world-player interaction
- A simple particle engine
- Player drivable 'vehicles' (just a box visually, but you could hop in, move it around, and hop out again)
- Player tracking 'security cameras' and with real time updated security monitors
- Used the Half-life editor 'Hammer' (formerly Worldcraft) for world editing with some custom import code to convert to a proprietary world format
The source and executable for the demo are available here.
Honors Project - Real-time generation of realistic particle snow
My honors project focused on the real-time generation of realistic particle snow, as well as a flexible runtime-configured particle engine. The project was written in C++ and compiled in Visual Studio .NET. The engine was completely different from the 'OpenGL' engine since the focus wasn't on implementing a brush based octree level, but rather the particle engine.
|Rendering rain particles.|
|Rendering snow particles.|
The engine featured:
- Dynamic heightmapped terrain loaded from an 8-bit grayscale image
- A particle system focused on cheap, numerous entities and file-
- Easily customized file-based particle settings that could be extended for effects such as rain or snow
- Run-time configurable particle effects that could be modified on the fly
- Real-time simulated snow accumulation through dynamic texture editing that gave the impression of the snow 'building up' over time.
The source and binary files are available here.
During courses I took on Networking, we were tasked with developing some useful projects such as:
- A simple ICQ-Like Messenger service using Java RMI and tuple space to synchronize and access a shared message space.
- A simple TCP-Like networking prorocol to assure packet-delivery over a non-stable system (e.g. UDP).
- A simple distributed Whiteboard application that allowed two users to draw basic shapes (e.g. lines and circles) on a whiteboard. The state would then be shared with all users connected. This also used Java RMI for networking and message passing.
One of the most interesting topics I studied in school was AI, specifically Genetic Programming and Ant-based AI. Through the years we had to come up with solutions for some interesting problems including:
- Ant-based food collection using Genetic Programming. This project's goal was to develop a simulation of simple agents who were tasked with collecting food from their environment. Each agent ran an identical 'program' using a simple set of actions defined by the programmer ahead of time (e.g. move, turn, pick up, etc..). The goal was to collect the most food for the colony. The agents would drop pheromone to simulate the simple communication that ants use. The program that controlled the ant behavior was then evolved from a population of randomly-generated programs using Genetic Programming techniques.
Screenshot of the ants dropping pheromone trails along their paths.
- Solving the 'Travelling Salesman' problem using Ant-Based AI. The goal of this project was to simulate an ants approach to solving complex TSP problems. Each ant probabalistically chooses a path through all the cities and drops pheromone proportionate to the fitness (length) of that path. By sharing this pheromone path, good solutions for large TSP problems can be provided in relatively short time.
Screenshot of the best paths so far discovered during a run.
- Solving the 'Travelling Salesman' problem using Genetic Programming. This project used a Genetic Algroithm (GA) to solve the TSP. Random paths are generated at first, and evaluated, then the best paths are 'bred' with each other to produce new child paths. The process was then repeated for each generation, essentially evolving a solution to the problem.
- Decision Tree induction. The goal of this project was to generate a decision tree based upon a set of data. It trained on a subset of the data, and then used the remainder to evaluate its accuracy on the rest.
- Various Fuzzy-Logic assignments. For example, implementing a fuzzy-logic controller to regulate water flow through a simulated nuclear reactor in order to maintain maximum output and prevent meltdowns. For this project the inputs were hot and cold water (of varying pressures in the pipes), and a drainage pipe. The controller was required to monitor the temperature and volume of the reactor core, and adjust the flow of the hot, cold and drainage pipes to ensure the optimum operating temperature. As well, Fuzzy Logic was used in the OpenGL engine to control the tracking movement targeting of security cameras.
The fuzzy logic controller adjusting the flow and temperature inputs to control core temperature.