-
Notifications
You must be signed in to change notification settings - Fork 4
/
globe_3d_info.html
546 lines (526 loc) · 27.3 KB
/
globe_3d_info.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
<head><title>GLOBE_3D</title></head>
<body>
<font face="Calibri, Arial, Tahoma"> <!-- Set font for the whole page !-->
<h2>GLOBE_3D</h2>
Welcome to GLOBE_3D, the GL Object Based Engine for 3D in Ada.
<p>
The Copyright statement appears in GLOBE_3D.ads.
<hr>
<ol>
<li><a href=#features>Quick <b>feature</b> list</a>
<li><a href=#guide>A (too) short <b>guide</b> about how GLOBE_3D works</a>
<li><a href=#demo>Navigating in 3D with the main <b>demo</b></a>
<li><a href=#build>How to build the engine</a>
<li><a href=#prog>Programming notes around GLOBE_3D</a>
<li><a href=#tools><b>Tools</b> provided with GLOBE_3D</a>
<li><a href=#resources><b>Web</b> Resources</a>
<li><a href=#bugs>Open bugs</a>
<li><a href=#todo>To-do list</a>
<li><a href=#thanks>Thanks</a>
<li><a href=#contact>Contact</a>
</ol>
<hr>
<ol>
<li>
<a name=features>
<b><font face="Arial, Tahoma">Quick feature list of GLOBE_3D:</font></b>
</a>
<p>
<ul>
<li>unconditionally portable sources (one set of sources for all platforms)
<li>real-time rendering; fast with a 3D hardware-accelerated graphics card
<li>full eye movements and rotations
<li>displays combinations of colours, materials, textures
<li>transparency
<li>multiple area rendering with the <a href=#portal><b>portal</b> technique</a>, for large, complex scenes
<li>collision detection
<li><a href=#bsp>binary space partition (<b>BSP</b>)</a>, for locating objects in complex scenes
<li>easy management of resources like textures, stored in .zip files
<li>input-output of 3D objects or linked groups of objects
<li>screenshots and video captures
<li>multi-view support
<li>vectorized geometry support
<li>extruded surface generator
</ul>
</p>
<li>
<a name=guide>
<b><font face="Arial, Tahoma">A (too) short <b>guide</b> about how GLOBE_3D works</font></b>
</a>
<p>
<ol>
<li><b>What is GL / OpenGL</b>.<br>
GL, ``Graphics Library'', is a quasi-language allowing to render, among others,
3D forms on a 2D screen area
in a very simple way, without needing to know about the hardware and the operating system.
Despite a continuous development to catch the features of new graphic cards, GL was
so well designed from the beginning, that using the features of the original GL
version (~1992) deliver pictures of amazing realism - and of course a lot faster
and with a better resolution than then. In many respects, GL resembles to Ada:
a clever design that avoids the momentaneous hardware or operating system constraints,
allowing to perfectly survive, along with the code developed in these languages,
to changes of hardware and systems.
<br>
<br>
<li><b>Drawing with the plain GL / OpenGL</b>.<br>
You can summarize the steps to perform a rendering as:
<ol>
<li>Prepare the link between the computer and GL.
For instance, GLUT does it in a totally portable way,
but you have other, direct gateways between various GUI systems (Windows, GTk, X Window,...) and GL.
(see Start_GLUTs in the <tt>mini_3d.adb</tt> demo)
<li>Prepare the perspective, lighting, display modes of GL
(see Start_GLs in the <tt>mini_3d.adb</tt> demo)
<li>Display forms. For the 3D, it boils down to displaying a mesh of triangles (eventually rectangles).
For displaying a single triangle, GL makes it extremely easy:
<ol>
<li>GL.GL_Begin(GL.TRIANGLES);
<li>GL.Vertex( vertex_1 ); GL.Vertex( vertex_2 ); GL.Vertex( vertex_3 );
<li>GL.GL_End;
</ol>
Now, along with the second step, you may want also to pass a "quasi"
normal vector associated to vertices, to have nice
lighting, and also texture coordinates if you want an image "sticked" onto
your triangle. You can also, before the first step, mix colours to textures, and this
in the various modes of infography: diffuse, emissive, etc.
You can play with transparency.
It's where it begins to be complicated...
</ol>
<br>
<br>
<li><b>What GLOBE_3D does</b>.<br>
GLOBE_3D organizes and facilitates the display of 3D meshes.
Basically, it defines an object type, Object_3D, containing vertex coordinates, a list of
faces referring to these vertices, and all informations about textures, colours,
materials. <br>
That way, you prepare your objects, and once they are defined,
all you need is to call GLOBE_3D.Display( my_object ). The management and loading of
textures is done by GLOBE_3D altogether. All you need there is to name one or two zip files
containing the textures (in TGA or BMP formats) and to give the texture names
when defining the faces.
<br><br>
<li><b>Animation</b>.<br>
The animation is obtained by constantly redrawing the scene, with
a moving point of view and/or moving objects. Since the drawing begins with a black sheet,
drawing directly to the screen would give a disturbing flickering. It is why the double-buffer
technique is used: buffer 1 is being drawn while the other, buffer 2, is shown, and when the
drawing on buffer 1 is done, the buffers are swapped and buffer 2 will be drawn; and so on.
It doesn't matter if the scenes are drawn too often, it is visually disturbing only when
they appear in a to slow rhythm (less than 24 images per second).
<br><br>
<li>
<a name=portal>
<b>Portal rendering</b>.<br>
Displaying, say, an entire city as a single object would be
too slow. Especially, the spectator only sees small portions of it, so most of the city's
polygons would be hidden by others. A solution to that is the portal rendering technique.
The city is subdivided into many smaller objects. A house in the city will be typically
subdivided into rooms. Say the spectator is in room A and is looking in room's B direction<br>
<br>
<center>
<table border=1 cellspacing=2 cellpadding=5>
<tr><td rowspan=3>Room A →</td><td bgcolor=lightblue>3</td>
<td rowspan=3>Room B</td>
<td rowspan=5>Room C</td></tr>
<tr><td bgcolor=lightgreen>7</td></tr>
<tr><td bgcolor=cyan>17</td></tr>
<tr><td colspan=2>Room D </td>
<td>Room E</td></tr>
</table>
</center>
<br>
During the construction of the scene, if there are 3 windows between room A and room B,
they will be, in room A, be faces, say, 3, 7, and 17. Then it is just a matter of setting
<tt>A.face(3).connecting:= B;</tt>
<tt>A.face(7).connecting:= B;</tt> and
<tt>A.face(17).connecting:= B;</tt> in order to have room B displayed correctly.
Perhaps the three portions of room B will have different colours if the windows are
coloured differently. Note that the Ada variable <tt>B</tt> is an access to the real
object, of type <tt>p_Object_3D</tt>. Of course, room C can be seen as well, so
through the magic of recursion, it will be displayed befor room B.
For the details on how invisible parts are clipped away and stop the recursion in a
natural, geometric way, see procedure <tt>Try_portal</tt> in <tt>GLOBE_3D</tt> main package body.
For displaying the portals' frames to see how it works "in live",
set <tt>show_portals</tt> to <tt>True;</tt> in the package <tt>GLOBE_3D.Options</tt>.
<br><br>
<li>
<a name=bsp>
<b>Binary space partition (<b>BSP</b>)</b>.<br>
In order to locate an object among a multitude of a scene's objects,
there is a straightforward dichotomy method consisting in splitting
the space with planes until all objects can be found unambiguously.
This is practical for knowing in which object the spectator currently is,
given his coordinates. The package <tt>GLOBE_3D.BSP</tt> provides such a
<tt>Locate</tt> procedure. We reuse the above map for showing two possible
partitions, the second one being obviously better balanced.
<center>
<table>
<tr><td>
<table border=1 cellspacing=2 cellpadding=5>
<tr><td>front, front, front</td>
<td>front, back, front</td>
<td rowspan=2>back</td></tr>
<tr><td>front, front, back</td>
<td>front, back, back</td></tr>
</table>
</td><td>
</td><td>
<table border=1 cellspacing=2 cellpadding=5>
<tr><td>front, front</td>
<td>back, front, front</td>
<td rowspan=2>back, back</td></tr>
<tr><td>front, back</td>
<td>back, front, back</td></tr>
</table>
</td></tr>
</table>
</center>
BSP trees can be conveniently written to files using <tt>GLOBE_3D.IO.Save_file</tt>
and read from a resource archive using <tt>GLOBE_3D.IO.Load</tt>.
</ol>
</p>
<li>
<b><font face="Arial, Tahoma">Navigating in 3D with the main GLOBE_3D Demo.</font></b>
<p>
As a preliminary note, here is what is needed to run the <b>demo</b>, GLOBE_3D_Demo.
In the same directory, you need:
<ul>
<li>the executable, <b>GLOBE_3D_Demo.exe</b> (Windows)
<li>the resource files: <b>g3demo_global_resources.zip</b> and <b>g3demo_level_resources.zip</b>
<li>FreeGLUT for Windows: <b>freeglut.dll</b>
</ul>
If you unzip the whole globe_3d.zip archive, you get the right files
at the right place, that is in the ./demo directory.
<p>
Here are navigation instructions for the demo
(at some point of time there will be configuration files; meanwhile
you can change control settings in Game_Controls.adb and recompile;
note also that the letter keys are for a QWERT keyboard):
<a name=demo></a>
<p>
<table border=1>
<tr><td align=center><b>Action</b>
<td align=center><b>Keyboard</b>
<td align=center><b>Mouse</b>
<td align=center><b>Effect</b>
<tr><td>
Popup Menu
<tr><td><td> - <td>middle mouse button<td> toggle to full-screen
<tr><td>
Modifier keys
<tr><td><td> alt <td> right button <td> slide mode
<tr><td><td> shift <td> - <td> run mode
<tr><td><td> ctrl <td> - <td> object mode
<tr><td>
Turning the eye (rotation)
<tr><td><td> W/S or vertical arrows <td>left button (forward)<td> go forward/backwards
<tr><td><td> lateral arrows <td>mouse movement<td> turn the eye left/right (Y axis)
<tr><td><td> page up/down <td>mouse movement<td> turn the eye up/down (X axis)
<tr><td>
Moving the eye (translation)
<tr><td><td> Q/E <td> - <td> swing turn the eye around sight axis (Z)
<tr><td><td> A/D, or alt + lateral arrows <td>right button + mouse movement<td> move the eye on X axis (slide mode)
<tr><td><td> R/F, or alt + page up/down <td>right button + mouse movement<td> move the eye on Y axis (slide mode)
<tr><td>
Turning the object
<tr><td><td> ctrl + lateral arrows or page up/down <td>ctrl + mouse movement <td>turn the object
<tr><td>
Others
<tr><td><td> 0 <td> - <td> reset eye position and orientation
<tr><td><td> 1..9 <td> - <td> switch a light on / off
<tr><td><td> space <td> - <td> next object (or group of objects)
<tr><td><td> F10 <td> - <td> collision detection on / off
<tr><td><td> F11 <td> - <td> video capture (.avi) on / off
<tr><td><td> F12 <td> - <td> screenshot (.bmp)
</table>
</p>
<p>
There are also command-line options for special purposes:
<ul>
<li> <tt>-dump</tt> : dumps all objects in the demo as <tt>.g3d</tt> <tt>.bsp</tt> files
<li> <tt>-load</tt> : load both objects ("bricks") of the "space station" demo,
instead of creating them with Ada code
<li> <tt>-load=mylevel</tt> : sets "mylevel.zip" as level resource; from that resource, loads
mylevel_$_area#.g3d with #=1,2,3...; loads mylevel.bsp.
</ul>
</p>
<li>
<a name=build>
<b><font face="Arial, Tahoma">How to <b>build</b> the project on various platforms and compilers:
</font></b></a>
<p>
The <tt>GLOBE_3D_Demo.adb</tt> or the much simpler <tt>mini_3d.adb</tt> demo, in directory <tt>./demo</tt>,
can serve as a prototype for your applications using GLOBE_3D.
That directory also contains various scripts (or so) for various systems.
<ul>
<li> <b>Windows</b>:
<ul>
<li> <b>GNAT</b> compiler:<br>
- [using then GNAT Programming Studio (GPS):] open the <b>globe_3d_demos.gpr</b> project file, then press F4.<br>
or<br>
- launch <b>make_all.cmd</b> .<br>
Then you get GLOBE_3D_Demo.exe.
<li> <b>ObjectAda</b> compiler: open <b>globe_3d_objectada.prj</b>, then press F7.
<li> another compiler: should be fine, just need GL, GLU, and, <i>for the demo only</i>, (Free)GLUT bindings
</ul>
<li> <b>Linux</b>:<br>
To force lower case on file names: unzip -L globe_3d.zip;
for the Ada files (*.ad*), the "-a" or "-aa" option may be useful to ensure you get
the correct end-of-line codes.
<br>
<ul>
<li> <b>GNAT</b> compiler:<br>
- [using then GNAT Programming Studio (GPS):]
open the <b>globe_3d_demos.gpr</b> project file, choose Scenario OS_Kind = linux, then press F4.<br>
or<br>
- from a terminal, run: <tt>gprbuild -P globe_3d_demos.gpr -XOS_Kind=linux</tt>
</ul>
As a prerequisite, you need some libraries to be installed.
When building a GLOBE_3D project, the linker will tell you what is eventually missing.
These libraries might be (see the linker section in the .gpr file for an up-to-date list):
<b>GLU, GLUT or FreeGLUT, Xi, Xext, Xmu</b>.
For example, on the Ubuntu and Fedora distributions, and surely on most other Linux distributions,
the installation is pretty easy: search from the
software installer (Add/Remove software, or the package manager) the libraries mentioned above,
select the "lib*-dev" or "lib*-devel"
package (e.g., libxi-dev) and push the install button.
NB: for FreeGLUT the name might be something like freeglut3-dev (no "lib" in front).
Don't try to rename library components or add symbolic links, you might end up with a version mess.
<li> <b>Macintosh (Mac OS X)</b>:<br>
You need first to install the X11 server within your Mac installation DVD; then you'd better to force
lower case on file names and to ensure you get the correct end-of-line codes:
unzip -La globe_3d_xx.zip; (don't use -aa option).
Then build FreeGlut, see instructions in obj/libmac.
<br>
<ul>
<li> <b>GNAT</b> compiler:<br>
- [in GPS:] use the globe_3d_darwin.gpr project file (might be replaced by the common globe_3d_demos.gpr at some point)<br>
or<br>
- gnatmake -P globe_3d_darwin.gpr
<li>
Execution:<br>
- export DYLD_LIBRARY_PATH=../obj/libmac/lib<br>
- ./globe_3d_demo<br>
or<br>
- ./mini_3d<br>
</ul>
<li> <b>Other systems</b>:<br>
Should be fine, just need GL, GLU, (Free)GLUT (the latter is only needed by the demos).
Any volunteer ?...
</ul>
</p>
<li>
<a name=prog>
<b><font face="Arial, Tahoma">Programming notes around GLOBE_3D:</font></b>
</a>
<p>
<ul>
<li>
Graphical & performance considerations
<ul>
<li> Avoid using <b>textures</b> whose dimensions are not power of two, because
they are not supported by GL versions under 1.3 and when they are supported,
the display is way slower than their 2**m × 2**n rescaled equivalents
(on a certain video accelerator, ~30 times slower!).
<li> The face-by-face <b>visibility culling</b> is done by OpenGL and/or the graphics card,
but you can improve it by not displaying or clipping whole chunks that are obviously not
or only partially visible. This is done by the <b>portal</b> technique.
For that you have to subdivide your scene or bigger objects into several smaller objects
linked through invisible faces (the portals). In the demo, the first and last scenes use
this technique.
You can make the portals visible by setting GLOBE_3D.Options.show_portals to True.
</ul>
<li> You can use GLOBE_3D's I/O framework to load textures even for some renderings
without GLOBE_3D (e.g. by displaying a "2D" image with GLUT_2D.Put_Image).
To that purpose, call GLOBE_3D.Textures.Check_2D_texture(id), then do your
rendering with GL.BindTexture referring to image number id+1 (<b>caution</b>: note the +1,
since the user textures in GL begin with 1 and the ones in GLOBE_3D with 0,
as the Ada 'Pos attribute does.
<li> If you develop a GLOBE_3D application with GNAT, a good starting point is to clone
a project file from the ./demo directory (globe_3d_*.gpr) and adapt it..
</ul>
</p>
<li>
<a name=tools>
<b><font face="Arial, Tahoma">Tools provided with GLOBE_3D</font></b>
</a>
<p>
In the <tt>./tools</tt> subdirectory, you find the following tools:
<ol>
<li> <tt>./tools/wavefront</tt> contains an Ada program, <b>o2g</b>, for translating a Wavefront
3D model, usually stored as a pair of files model.obj, model.mtl, to a GLOBE_3D binary
object, model.g3d, that GLOBE_3D.IO is able to load in an application.<br>
The Wavefront format is text-based and very simple. You can write or customize by hand a simple 3D model in
this format. On the other hand, most 3D modeling programs like Blender or 3D Studio are able to export models
into this format, so you can access complex, multi-textured models this way.<br>
Additionally, <b>o2g</b> stores model.g3d and the needed textures into a zip file, model.zip,
making it easy to visualize the object with the main GLOBE_3D demo (GLOBE_3D_Demo.exe -load=model).
<li> <tt>./tools/gmax</tt> contains a script, <b>max2ada.ms</b>, for the GMAX software, to convert a 3D model
into a package capable of generating the equivalent GLOBE_3D object.
To use it, run the script from GMAX, and use GMaxSLGRAB.exe to grab the Ada code
from the "listener" window. Example of its output is Dreadnought.ads/.adb in <tt>./src/models</tt>
<li> <tt>./tools/vrml</tt> contains an Ada program, <b>wrl2ada.adb</b>, for translating VRML code into an Ada package
capable of creating a GLOBE_3D corresponding to the VRML world / object.
Example of its output is Lissajous.ads/.adb in <tt>./src/models</tt>
<li> <tt>./tools/doom3</tt> contains two tools that take as input a <tt>.proc</tt> file,
a format defined by <a target=_blank href="http://www.idsoftware.com/">id software</a>.
A <tt>.proc</tt> file is a processed map file corresponding to the landscape of a game level. It is written
by some of id software's Radiant level designer family. The editor provided with Doom 3 is one of them.
<ul>
<li> <tt>./tools/doom3/to_ada</tt> contains a source translator, <b>d3a</b>, similar to the VRML one.
The generated Ada code builds the level's objects and areas, connects the areas through
portals and builds a BSP tree.
Its advantage is the one of having Ada source code for generating 3D worlds (no I/O or file
format issues), but even a small level produces a huge Ada source that could become a challenge to
some compilers.
<li> <tt>./tools/doom3/to_g3d</tt> contains a file converter, <b>d3g</b>, that uses GLOBE_3D "behind the scenes"
for building in-memory the objects and then write binary files (.g3d, .bsp) that GLOBE_3D.IO is
able to load in an application.<br>
The batch script <tt>procpack.bat</tt> allows a relatively easy way
to automatize the packaging of a game level.
If you have such a file (search the Internet for
"<a href=http://www.google.com/search?q=Doom+3+Map>Doom 3 Map</a>" or
"<a href=http://www.google.com/search?q=Quake+4+Map>Quake 4 map</a>"),
extract the <tt>.pk4</tt> file, that is indeed a .zip file.
Then, put all textures in, say, <tt>mylevel.zip</tt>.
That .zip file is supposed to have no directory structure (otherwise, you need to
have the same as in the .proc file and remove the "-j" option in d3g calls).
Store <tt>mylevel.zip</tt> in the <tt>./tools/doom3/to_d3g</tt>.
In the same directory, put the .proc file, renamed if needed as
<tt>mylevel.proc</tt> in order to have the same name.
If you have copies of Doom 3, Quake 4, or any game of that family,
you may want to adjust the line with "<tt>d3tex.zip</tt>" in
<tt>procpack.bat</tt>. The file <tt>d3tex.zip</tt> is supposed to contain
all the textures in the original game (in Doom 3, textures are in <tt>pak004.pk4</tt>).
You also need the <a target=_blank href=http://www.info-zip.org/>zip and unzip</a> utilities.
When everything is ready, run "procpack mylevel".
You'll get an updated <tt>mylevel.zip</tt> with all needed textures,
3D objects corresponding to areas and the BSP tree.
<tt>GLOBE_3D_Demo -load=mylevel</tt> will then load the game level,
and you can navigate in it...
</ul>
<li> <b>gl_overloader.adb</b> : a simple procedure that writes a chunk of Ada code,
with overloaded names for various GL routines with different C names
for different parameter list. You find the result GL.ads in the <tt>./bindings</tt> subdirectory.
<li> <b>check_tiling.htm</b>: a mini HTML file just to visually check if a texture is periodic enough.
</ol>
<br>
Note: the conversion tools from vrml and doom3 above are based on
a grammar you may want to modify (the *.y and *.l files).
To that aim, you need the AYACC and AYFLEX tools. They are available in the SVN repository on the GLOBE_3D
project site (<tt>./extras/aflex95.zip</tt>, <tt>./extras/ayacc95.zip</tt>),
as well as in the P2Ada project's archive (see Web resources below).
</p>
<li>
<a name=resources>
<b><font face="Arial, Tahoma">Web resources for GLOBE_3D:</font></b>
</a>
<p>
<ul>
<li> Present Web page for <b>GLOBE_3D</b>: <a target=_blank href=http://globe3d.sf.net>here</a>.<br>
<li> <b>GLOBE_3D</b> SourceForge project site: <a target=_blank href=http://sf.net/projects/globe3d/>here</a>.
<a target=_blank href="http://sf.net/projects/globe3d"><img
src="http://sflogo.sourceforge.net/sflogo.php?group_id=215365&type=4"
width="125" height="37" border=1 ALIGN=absmiddle alt="SourceForge.net Logo" />
</a>
Mirror: <a target=_blank href="https://github.com/zertovitch/globe-3d">on Github</a>.
<li> <b>OpenGL</b> & GLUT: <a target=_blank href=http://www.opengl.org/>here</a>.
<li> <b>GNAT</b>, a free Ada compiler with which GLOBE_3D can be compiled:
<ul>
<li> GNAT Web site: <a target=_blank href=http://www.adacore.com/>here</a>.
<li> Free GNAT GPL version to be found <a target=_blank href=http://libre2.adacore.com/>here</a>.
<li> AdaGIDE: a free Development Environment for GNAT, as alternative to GNAT's GPS,
e.g. to separately build tools in parallel to a GPS session:
<a target=_blank href=http://www.martincarlisle.com/adagide.html>here</a>.
</ul>
<li>The <b>ObjectAda</b> compiler, to be found
<a target=_blank href=http://www.ptc.com/en/developer-tools/objectada>here</a>.
<li> The <b>FreeGLUT</b> project site
<a target=_blank href=http://freeglut.sourceforge.net/>here</a>.
<li> <b>NeHe</b>, an excellent OpenGL tutorial, <a target=_blank href=http://nehe.gamedev.net/>here</a>.
<li> <b>GMax</b>, a free version of 3D Studio Max, <a target=_blank href=http://www.turbosquid.com/gmax>here</a>.
<li> A few models and textures sites:
<a target=_blank href=http://www.turbosquid.com/gmax>Turbo Squid</a>,
<a target=_blank href=http://scifi3d.theforce.net/>Sci-Fi 3D</a>
<li> The <b>P2Ada</b> project site, which contains up-to-date sources for the AYACC / AFLEX tools
<a target=_blank href=http://p2ada.sourceforge.net/>here</a>.
</ul>
</p>
<li>
<a name=bugs>
<b><font face="Arial, Tahoma">Open bugs</font></b>
</a>
<p>
<ul>
<li> (Game_control/GLUT) Modifier keys are not updated independently of the others key down/up events.
<li> GLOBE_3D.Random_extrusions needs to split a quadrilatere into two triangles when it is not flat
or even when it is not a rectangle (bad display on at least one ATI card)
<li> d3a (doom 3 level translator): some surfaces seem to be missing (e.g. parts of pipes)
</ul>
</p>
<li>
<a name=todo>
<b><font face="Arial, Tahoma">To-do list</font></b>
</a>
(some items may go beyond the scope of graphics and GLOBE_3D):
<p>
<ul>
<li> <a target=_blank href="http://flyx.github.io/OpenGLAda/">OpenGLAda</a> seems a good candidate for
replacing the GL layer beneath GLOBE_3D. It is maintained by a small community and includes cool GPU extensions.<br>
To do there:
<ul>
<li>For a smooth transition: adapt "our" GL layer to OpenGLAda types, subprograms, etc. (work in progress)
<li>Let users choose between "our" GL and OpenGLAda, perhaps with a .gpr switch
</ul>
<li> Move reusable parts of the big demo to Game_Control or other packages (GLUT.Windows in the works)
<li> Game_Control: add support for configuration files
<li> 3D Studio / GMAX: see in the max2ada.ms file
<li> (demos) improve lightings, better calibrate mouse movements
<li> I/O: store texture name only if different
<li> implement sub-objects or neighour-objects (linked lists)
<li> make a demo or a game with OpenAL or SDL for sounds & music.
<li> Implement an
<a target=_blank href=http://www.web3d.org/>X3D</a> (the successor of VRML)
translator or reader
<li> VRML: support for textures
<li> More support for Blender format(s)
<li> add a facility for the <a target=_blank href=http://en.wikipedia.org/wiki/Vertigo_effect>Vertigo effect / Dolly zoom</a>
</ul>
</p>
<li>
<a name=thanks>
<b><font face="Arial, Tahoma">Thanks</font></b>
</a>
<p>
<b>Many thanks</b> to Rod Kay, for the new evolutive object-oriented type tree around the 3D object,
major improvements of GLOBE_3D rendering
for polygon soups, GLUT.Windows, GLUT.Devices, and nice demos (terrain
mapping, multi-window views).<br>
Also thanks to:
<ul>
<li> W. M. Richards, Pascal Obry, Jerry van Dijk for the Ada bindings to GL, GLU, GLUT.
<li> Marc A. Criley for the Linux implementation & bindings versions.
<li> Ali Bendriss for the (old) Linux makefile, testing and the proper way to exit GLUT!
<li> Stéphane Perret, for advice on user controls and the idea of the
Sierpinski sponge - see
<a target=_blank href=http://www.vive-les-maths.net/>here</a> for more...
<li> Pascal Pignard and Uwe R. Zimmer, for the Mac OS X / PowerPC tuning & testing
<li> John Howard, for the new Linux/Unix make script
</ul>
</p>
<li>
<a name=contact>
<b><font face="Arial, Tahoma">Contact:</font></b>
</a>
<p>
<ul>
<li>Main author and project coordinator: Gautier de Montmollin, Switzerland
e-mail: <a target=_blank href=mailto:gautier.de.montmollin@gmail.com?Subject=GLOBE_3D>here</a>.
</ul>
</p>
</ol>
</font>
</body>