The iosys Game Engine is a 3D video game engine and toolset programmed in VB that I developed while learning the DirectX SDK. I’ve moved on from DirectX for the time being, but I still consider this to be one of my greatest programming achievements ever. I started learning DirectX with a few decent books, some documentation on the web, and an invaluable tutorial series by Jack Hoxley titled DirectX4VB. My experience with DirectX and programming evolved quickly during this time and as a result, the engine went through several refactorings.
Some fully working features include:
- Collision detection with the ground surface for walking around as a playable character
- Command line console (similar to Quake)
- Footstep and gunshot sound effects
- Level design using any number of top, side, and 3D viewports (similar to 3D Studio Max)
- Textures and materials (similar to 3D Studio Max)
- Polygon manipulation using vertex anchors
- Load and display .x models and meshes (from 3D Studio Max)
- Colored fog
- Animated, rotating planet with alpha blended cloud layer
- Texture mapped polygonal objects and faces
- Bounding box hit detection
On my first venture into 3D graphics using DirectX 8 I began by designing a simple rendering engine which turned into a test bed for various features such as terrain with collision, animated and textured .x models (from 3D Studio Max), fog techniques, colored dynamic lighting, alpha blending and sound effects. I had the most difficult time wrapping my head around the mathematics for camera-mouse-look, first of which was a decent Sine/Cosine algorithm and later a quaternion that did the trick. Matrix transformations were also pretty rough starting out, if only for the fact that I was too busy thinking about game design during my Algebra classes to pay any attention (what a coincidence that turned out to be). After grasping many of the concepts of DirectX, I decided to focus on creating a level designer and game development toolset, pictured below.
I started programming the first editor with Visual Basic 6.0 and DirectX 8.1. This shows the use of three viewports and polygons with anchor points for simple drag-and-drop mouse shaping of a 3D world. Colored lighting and multiple textures are used here, but each “brush” (polygons with texture mapping) at this stage is rendered one-by-one. The octree node in the TreeView was nothing at the time. The floor you see in the picture is a “Cube” brush with sub-division parameter turned up, and each division being able to have separate texture mapping applied.
Here’s where I implemented a space partitioning technique to cull geometry outside of the viewport and speed up rendering; a simple sector partitioning system. The editor at this stage was much more complex and offered control of very specific parts of the geometry.
This was where my work on the VB6 version of the editor ended. The screenshot shows two viewports (you could open as many viewports/cameras as you wanted) with the first viewport displaying a direct view on the world and the second viewport a couple steps behind that of the first camera. The view frustum of the first viewport camera is visible in the second viewport. This frustum is tested against the space partition for faster rendering.
Search terms: 3d vb Engine, 3d game engine, visual basic 3d