James Abbey

Graphics Engineer & Physics Simulation Specialist

Graphics · Audio · Physics

One of my first OpenGL learning projects animating simple computed shapes drawn with static colors, moving in harmonic motion, and lit with a moving light source.

Written for Windows using my own custom, operator overloaded, C++ vector and matrix classes and utilizing the fixed graphics pipeline of an early version of OpenGL.

Another early OpenGL project of a formula based shape and color pattern that looks a bit like a mushroom.

Built for the Windows platform in C++ and C with some spin and zoom control using the mouse.

One of the early styles of tops for Cosmic Top, an app simulating a toy top and recognized by App Store Rewind 2011 as one of the Best of iPhone Entertainment in the US and 8 other countries.

All the graphics, physics, touch interaction, sounds, and audio effects of the tops for this app and the spinners for Cosmic Fidget Spinner, presented below, were designed and developed by me and written in Objective-C and with OpenGL ES functions and shaders for iOS at Cool Bear Studios, which I co-founded with my friend and business partner, Mike Anderson.

These 'disco' tops result from mapping and additively blending dynamic textures onto spiraling curve points. One variety drawn with texture surfaces normal to the curve, the other with normals directed toward the observer's eye.

The code, in Objective-C, that creates and draws a 'spheroid' style of top for Cosmic Top.

The following video shows an example of this style.

Color surfaces, stored in CPU memory, are mapped onto a static surface with linear interpolation, modifying a vertex buffer in real-time, to generate a smooth flow of color at a rate adjustable by the user.

A 'spheroid' style top spinning and periodically flipping similarly to the object in the next video.

With 'funky' mode enabled for tops and spinners, the principal moment of inertia of the symmetric spin axis is assigned an intermediate value, not maximum or minimum.

Spin about such an axis is unstable, while spin about the maximum and minimum axes are stable.

Known as the 'tennis racket theorem' or 'intermediate axis theorem', this phenomenon has also been called the 'Dzhanibekov effect', after the Soviet cosmonaut Vladimir Dzhanibekov who demonstrated it in orbit aboard the Salyut 7 space station in 1985 with a T-handle nut.

The video illustrating this effect here is available courtesy of NASA.

The physics code governing the motion of tops and spinners for Cosmic Top and Cosmic Fidget Spinner.

Euler's equations are expressed as a system of 12 first order differential equations directly in terms of the 3x3 rotation matrix and angular velocity, avoiding the use of Euler angles and quaternions, and integrated using the 4th order Runge-Kutta method with checks to ensure orthonormality of the rotation matrix.

Originally written in Objective-C and translated into Swift here in preparation of an iOS update.

A 'toroid' style top with a demonstration of color flow, gravity, and spin.

Measuring orientation of the device using the internal gyroscope, a view is constructed like that of Virtual Reality where the display appears as a window from which the stars appear fixed in the real world.

When gravity is enabled, the top rotates, precesses and nutates as an actual top would with respect to real space.

A 'glow curve' style top is created in real-time by mapping a thin, one-dimensional texture animation between closely spaced curve points to represent the projection of the curve's cross section in the view plane and drawn using a maximum value blending function.

To avoid artifacts, the length of the line texture shrinks to zero as the curve's tangent approaches the direction of the observer's eye.

A 'ribbon surface' that is like the 'glow curve' but technically simpler because the animated line texture lies in a 3D surface making its projection in the view plane well defined.

Fidget spinners from Cosmic Fidget Spinner, constructed in a fashion similar to the 'spheroid' tops, but having a newly designed class of shapes and including shaders that generate iridescent colors.

A level editor developer tool for a retro style space shooter game, yet to be released, that allows one to design flight paths, alien properties, and level characteristics in every detail.

A shared effort with most of the conceptual design of the game originating from Mike Anderson and most of the GUI layout and programming, notably the routines for creating and editing flight paths, produced by me.

Written in Visual Studio's Visual Basic on the Windows platform.

A developer tool for creating textures and texture array animations called Texture Create.

Its output and image generation algorithms are employed in Cosmic Top and the space shooter game under development seen in the previous and next videos.

Written by me in Visual Studio's C# for Windows and shared here on my personal GitHub page, its permits one to make textures based on morphing, transforming of double glow circle and rectangle primitives.

A retro style space shooter game, yet to be released, that makes use of the previously displayed level editor and Texture Create output and algorithms, translated by me from Visual Basic and C# into Objective-C.

I also wrote all the OpenGL ES shader code, created the special animations, and developed the 3D audio effects which can be heard in this video.

A Metal graphics learning project animating a textured Utah teapot, lit by a stationary point source, and shaded using the Blinn-Phong reflection model.

Written in the C++ based Metal Shading Language and Swift for Mac and iOS.

A Metal graphics learning project of a mesh shaded torus with an evolving color pattern and nearly 4 million triangles generated directly on the GPU in real-time, lit by a fixed point source, and Blinn-Phong shaded.

Written in the C++ based MSL and Swift for Mac and iOS.

A Metal graphics learning project of a mesh shaded, real-time rendering of the Mandelbrot set.

Written in the C++ based MSL and Swift for Mac and iOS.

Get In Touch

Interested in collaborating or learning more about my work?

Email Me GitHub LinkedIn