<a href="index.html"><img src="mpage_a.gif" alt="Start page" border=0></a>

My Resume (CV)

(c) by mataya, 1999.

# My OpenGL work

### Army part (!?) - digression (please ignore if you like by skiping this - right to OpenGL;)

There is a time when "a man has to do what A MAN has to do"...
Ok... let's cut the crap :-) if your country is one of those where all men has to do regular military service - don't get fooled with stories that you're not 'a man' if you don't go to army or were not yet there (from what-ever reason)...
Trust me - I've been there.. and now I completely understand what words from song "In the army now" means (especially: "..nothing to do all day but to stay in bed" :-)
Ok, ok - it's not so bad - actually, it's a _really_ big experience to go through all that, to see all different "worlds" people live in. You can also meet some really interesting people, have some really good friends, even have a lot of fun! (despite the fact that purpose of this entire system is to teach you how to 'destroy' other people :-( ). Finally - you can consider this as a huge vacation (6-months in my case), and use it to do (learn/read) things you'll never do in your world.
(That's it - I'm also using this space to send greetings to all my army buddies - unforgettable 38th class, and some folks from 36th, 37th and 39th!)

Part of my service I was doing office job with two more guys
I'm one on the right, just in case you can't recognize :-))
(painted by our artist soldier buddy (going to be judge in real life), - not his original style, but it's great because almost every single peace on the picture is having its own story and reason behind! :)

### Back to OpenGL

I guess now you wonder what this above has to do with OpenGL.. well, in my case - during my military service, after basic military training - I was doing some office work on computer.. and as a programmer - spending my free time to learn OpenGL and do programming! :-)

### RealArmy

My first idea was to make a RealArmy game - adventure 3D game where you are trainee soldier, and you do all that soldiers do when there is no war. (Do I hear "nothing"? ;)
Hmm, a bit tough for a start..

### Ahtletics3d

My second idea was to make 3d athletics game, something like this:

Parts of Athletics3d plan

### World3dModeler

But, I stuck on my World3dModeler tool that was suppose to be used to define 3d world for this game. I.e. with World3dModeler you can import 3d object models - meshes (supports 3DS and Wavefront format), and then define coordinates and rotations of objects, positions of cameras through time - and exporting this information in e.g. XML format.

World3dModeler
Here's sample of this target XML:

<?xml version="1.0" encoding="ISO-8859-2"?>
<world3dmodel>
<model-definitions>
<model-definition name="Flower02" type="AUTODESK3DS" filename=".\Capital1.3ds"/>
<model-definition name="Dolph01" type="AUTODESK3DS" filename=".\Dolphins.3ds"/>
<model-definition name="dolph02" type="AUTODESK3DS" filename=".\Dolphins.3ds"/>
<model-definition name="dolph03" type="AUTODESK3DS" filename=".\Dolphins.3ds"/>
</model-definitions>
<frame-names/>
<cameras/>
<model-instances>
<model-instance instance-name="f1" model-name="Flower02"/>
<model-instance-keyframe frame="1" pos-x="0.0" pos-y="0.0" pos-z="1.0"/>
<model-instance-keyframe frame="8" pos-x="0.0" pos-y="0.0" pos-z="-50.0"/>
<model-instance-frame frame-number="2"/>
<model-instance-frame frame-number="3"/>
<model-instance-frame frame-number="4"/>
<model-instance-frame frame-number="5"/>
<model-instance-frame frame-number="6"/>
<model-instance-frame frame-number="7"/>
</model-instance>
<model-instance-keyframe frame="1" pos-x="0.0" pos-y="0.0" pos-z="-50.0"/>
</model-instance>
<model-instance instance-name="Flower02 1" model-name="Flower02">
<model-instance-keyframe frame="1" pos-x="0.0" pos-y="0.0" pos-z="1.0"/>
</model-instance>
</model-instances>
</world3dmodel>

Status? 70% done...

### Terrain3d

Terrain3d viewer was a small test of my 3d engine developed for Athletics3d, then used in World3dModeler, and finally here. How fast can you do this?

.. 2 hours!

### Want to learn this?

If you are here hoping to learn OpenGL, perhaps you could help yourself with my source code and specification of 3D engine that I'm developing.
Anyway, OpenGL is huge topic, and there are great tutorials available on the web, but, if you wonder what was my way to learn stuff above, here it is:
1. First, I was browsing OpenGL tutorials from NeHe - this is a fastest way to get first results on a screen
2. Then, I bought a "OpenGL SuperBible" 2nd edition book - really the best in-depth guide to OpenGL API.. here things started to appear more clear, and now I understand what and why Nehe was doing
3. I've also checked "Microsoft DirectX - Direct3D Overview" (you can find it in MSDN) - it has nice chapter on 3D math that is used in both - Direct3D and OpenGL.. If you've learned matrices in your college, this reference should be enough to give you overview of 3D math that OpenGL SuperBible is missing. Also, you can compare Direct3D and OpenGL.
4. Get a "Game Programming Gems" book - this is great book from which you can learn much more - not only 3D solutions. I've learned here something about camera, state machines, matrices and quaternions (very important!!!), etc.

### My 3d engine (SuperEngine3d)

There is a nice specification of 3d engine I'm developing and using in Terrain3d, World3dModeler, and maybe in Ahtletics3d one day...

1.  Idea
2.  Window, DeviceContext, OpenGL RenderingContext and OpenGLViewport
2.1.  GLRenderingContext
2.2.  GLViewport
2.3.  GLChildWindow
2.4.  GLTextureManager
3.  Camera, World3d, Objects3d and Object3dModels
3.1.  Camera
3.2.  World3d and Object3d  1
3.3.  Object3dModel, ModelObject3d - support for Autodesk3ds and Wavefront Object3dModels
3.4.  Support for Autodesk 3DS files - Autodesk3dsDatabase and Autodesk3dsObject3dModel
3.5.  Support for WAVEFRONT obj files - WavefrontObject3dModel
4.  World3dModel - objects and keyframes
5.  World3dModel
6.  State machine engine
7.  3D Game application architecture
8.  APPENDIX A - Creating new VisualC++ project (for a 3d game?)


And here is treeview of Terrain3d project (and source files) as sample project using SuperEngine3d (check \tomaskovic\engine3d folder):

\Terrain3d
Terrain3d.cpp
Terrain3d.dsw
Terrain3d.dsp
Terrain3d.plg
Terrain3d.opt
StdAfx.cpp
StdAfx.h
\debug
Terrain3d.exe
texture.bmp
GLUT32.DLL
\src
TerrainWindow.h
TerrainWindow.cpp
TerrainMap.h
TerrainMap.cpp
\engine3d
Autodesk3dsObject3dModel.cpp
Autodesk3dsObject3dModel.h
Autodesk3dsDatabase.cpp
Autodesk3dsDatabase.h
Camera.h
Camera.cpp
CoordinateSystem_o3d.cpp
CoordinateSystem_o3d.h
GLChildWindow.cpp
GLChildWindow.h
GLRenderingContext.h
GLRenderingContext.cpp
GLTextureManager.cpp
GLTextureManager.h
GLutil.cpp
GLUtil.h
GLViewport.h
GLViewport.cpp
GLWindow.cpp
GLWindow.h
Math3d.h
Math3d.cpp
Matrix44f.h
Matrix44f.cpp
ModelObject3d.h
ModelObject3d.cpp
Object3d.h
Object3d.cpp
Object3dModel.h
Object3dModel.cpp
Quaternion.h
Quaternion.cpp
Vector3f.h
Vector3f.cpp
WavefrontObject3dModel.h
WavefrontObject3dModel.cpp
World3d.h
World3d.cpp
World3dModel.h
World3dModel.cpp
World3dModelCamera.cpp
World3dModelCamera.h
World3dModelFrameObject.cpp
World3dModelFrameObject.h
World3dModelKeyframe.cpp
World3dModelKeyframe.h
World3dModelCameraKeyframe.cpp
World3dModelCameraKeyframe.h
World3dModelModelInstanceKeyframe.h
World3dModelModelInstanceKeyframe.cpp
World3dModelModelInstance.cpp
World3dModelModelInstance.h
\util
Array.h
Array.cpp
BitmapRGB.cpp
BitmapRGB.h
Buffer.h
Buffer.cpp
BufferInputStream.cpp
BufferInputStream.h
BufferOutputStream.h
BufferOutputStream.cpp
Configuration.cpp
Configuration.h
FileInputStream.cpp
FileInputStream.h
FileOutputStream.cpp
FileOutputStream.h
InputStream.cpp
InputStream.h
MemoryManager.cpp
MemoryManager.h
OutputStream.cpp
OutputStream.h
SuperFilename.cpp
SuperFilename.h
SuperLog.cpp
SuperLog.h
SuperString.h
SuperString.cpp
TextLines.cpp
TextLines.h
TextWriter.cpp
TextWriter.h
Vector.h
Vector.cpp
\win
BaseChildWindow.cpp
BaseChildWindow.h
ChildPositionManager.cpp
ChildPositionManager.h
ClipboardDataSource.h
ClipboardDataSource.cpp
\xml
XMLAttribute.h
XMLAttribute.cpp
XMLDocument.h
XMLDocument.cpp
XMLElement.cpp
XMLElement.h