My OpenGL work
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! :)
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!
|