<a href="index.html"><img src="mpage_a.gif" alt="Start page" border=0></a>
Left-links touch-up! About me
My Resume (CV)


My OpenGL work
TJAD - Tool for JDBC Application Developers
Super Farb-Kopierer
Syndroma
AloHalo
Super Easy Media
MIC Basketball
Autosalon

Coral game
My Devil and ass GAME!

Virty Chat
My e-mail manager

Bluppo
Optical Player
My other stuff

My BS work
My papers & scripts

Page statistics
Web history

Created with text-editor!


Sign my Guestbook!

Leave me e-mail!

(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-definition name="quad.obj" type="WAVEFRONT" filename=".\quad.obj"/>
    </model-definitions>
    <frame-names/>
    <cameras/>
    <model-instances>
        <model-instance instance-name="f1" model-name="Flower02"/>
        <model-instance instance-name="quad.obj 1" model-name="quad.obj">
            <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 instance-name="quad.obj 2" model-name="quad.obj">
            <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...
Here is table of contents:

  Table of contents
  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?)
  9.  APPENDIX B - Adding Super Engine3D support to your project

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
    ReadMe.txt
    \debug
        Terrain3d.exe
        mask.bmp
        texture.bmp
        GLUT32.DLL
    \src
        TerrainWindow.h
        TerrainWindow.cpp
        TerrainMap.h
        TerrainMap.cpp
        \tomaskovic
            \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
                TextInputReader.h
                TextInputReader.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
          

Download

Want to download? Take a look at current work?
No problem, here it is - a specification:
SuperEngine3d specification (188k .doc)

and a Terrain3d sample full source code!:
Terrain 3d sample (417k)

Any questions? Feel free to mail me!
 

Click Here!

   

Last update - 5.Nov.2001. 11:11