Tyfirty is an object oriented real-time 3D engine based on DirectX 8. I started working on
this engine on October 2001, and I finished the first version of it within 6
months, i.e. on April 2002. This project was my entry point to the 3D world
and the purpose behind it in the first place was to give me good experience in 3D programming.
However, as the engine evolved enough I started to use it commercially as you'll see later in this page.
This engine acts as a layer between the application and D3D but it doesn't prevent the
programmer from reaching DirectX and dealing with it directly. In fact, the
programmer will still need to use functions of DX in certain areas. For
example, render states can be set by calling members of IDirect3DDevice8
Sits on top of DirectX 8. The engine acts as a helper layer between the application and DX but it does not shield DX from being accessed directly by the application. The programmer will have the complete freedom to use DX functions inside his application.
Open design enables the user to use Win32 APIs with the engine. This enables the use of the engine to build both the game and the tools. The engine can also be integrated into MFC.
Supports both full screen and window mode (all video modes are supported as long as they are supported by DX8).
Supports both right handed and left handed coordinate systems.
Texture management to prevent leaks and duplication in textures.
Supports texture of formats bmp, tga, png, and jpg.
Supports rendering to texture.
Can render a movie onto a texture using DirectShow through a special class designed for this purpose.
Supports a customizable Image Feedback effect through a special texture.
Supports cube textures and reflection.
Supports X file meshes.
Supports static meshes. Standard static meshes as well as vertex shader based meshes are supported.
Supports skin meshes. Two types of skin meshes are supported, the standard skin mesh and a vertex shader based skin mesh.
Materials and vertex color.
Supports cubic reflection maps.
Vertex tweening for mesh morphing.
Hierarchical meshes. Hierarchical meshes can hold static meshes as well as skin meshes. Mesh morphing is also supported by the hierarchical meshes. A single hierarchical mesh can contain a static mesh, a skin mesh, and a morphing mesh all together at the same time. The 3D Max 4 exporter was updated to enable grouping several meshes into one morphing mesh.
Supports multitexturing for the meshes. The provided 3DS Max 4 X exporter can recognize the RGB Multiply texture type in 3DS Max 4 and export it as multitexturing material in the X file.
A supported deformable mesh makes it easy to implement dynamic meshes.
Supports a general elastic mesh that can be used for different purposes like clothes. Collision detection is also supported by this class. Currently, collision with convex hulls is supported.
Supports cartoon shading via vertex shaders.
Includes special outline mesh to implement cartoon outlines on meshes with low polygons that cannot produce clean outline using vertex shaders.
BSP trees. A plugin for exporting BSP trees from 3DS Max 4 is also available. PVS is planned but not yet implemented.
Supports geo mip mapping.
A simple terrain generator can construct a static terrain mesh from a height map.
Supports shadow volumes.
Easy to use dynamic vertex buffer.
Easy to use dynamic points buffer that renders the points as screen aligned quads.
Easy to use dynamic lines buffer that renders the lines as screen aligned quads.
Easy to use dynamic polyline buffer that renders the polyline as screen aligned quads.
Supports particle systems through point sprites as well as through screen aligned quads to overcome the problem of limitation in point sprite size.
Supports billboards. Billboards are automatically sorted to be rendered in a back to front order.
Supports environment objects used to draw skies and horizons.
Supports skeleton animation through hierarchical meshes.
Can blend between different animation sets to prevent jumps from one animation set to another.
Built-in motion support for 3D objects. Movement and rotation can be performed with a single function call.
Built-in motion support for camera objects.
Supports sphere, AABB, and OBB bounding volumes.
Bounding volume to bounding volume collision detection. The code also finds the point and the normal of intersection.
Ray to bounding volume collision detection.
Ray to mesh collision detection.
Lines to convex hull collision detection.
Point to convex hull collision detection.
Supports 2D hierarchies.
Supports 2D frames with translation and scale.
Supports clip ports for rectangular clipping.
Supports animation of 2D hierarchies. Animation is done with B-Spline function.
A utilitiy is provided for editing 2D hierarchies with their animations.
Sound buffers management to prevent memory duplication for sound buffers.
Includes special classes for controlling sound playback and volume along a timeline. Those sound tracks can be edited with a special utility provided with Tyfirty.
Static sound buffers that can be constructed from wav files.
Sound capture buffers.
Built in B-Spline capabilities. The engine can move objects along a B-Spline curve.
Makes use of ID3DXFont object to draw text.
Enable the user to easily manage his data storage by letting him move his data between different data sources without the need to change the data loaders.
The following utilities are designed to help Tyfirty users prepare their data to be used by the engine. These utilities are also designed and developed by me.
TXExport: A 3DS Max 4 exporter for X files. It supports static meshes, skin meshes, animation, materials with diffuse and specular, vertex color, morphing, and others.
XBspExp: A 3DS Max 4 exporter for BSP meshes used by Tyfirty. These BSP trees are exported as X files with customized templates for this purpose. The exporter converts static meshes into BSP trees and exports them along with their materials.
TLAEdit: An editor for 2D hierarchies. This editor can be used to construct 2D hierarchies with their animation and sound tracks.
TXView: A viewer for X files.
My Role: Design and programming (individual work) Date: 2001-2002