Ebook: Wild Magic 0.2 (CD with example C++ source code for 3D Game Engine Design: A Practical Approach to Real-Time Computer Graphics)
Author: David H. Eberly
- Genre: Computers // Programming: Games
- Tags: Computer graphics Three-dimensional display systems Real-time game development source code
- Year: 2000
- Publisher: Morgan Kaufman
- Edition: 2
- Language: English
- zip
# ReleaseNotes0p1.txt
Release Notes for Wild Magic Version 0.1
This CD-ROM contains the initial release of the source code that accompanies
the book "3D Game Engine Design: A Practical Approach to Real-Time
Computer Graphics". There are a number of known issues about the code. As
these issues are addressed, the updated code will be available at the
website http://www.magic-software.com/3DGameEngineDesign.html. Bugs,
suggestions for improvements, and other correspondence can be sent to
[email protected].
The current known issues are
1. Mesh algorithm for continuous level of detail appears not
to be working based on the results from the test code TestClodMesh.
2. The MgcIK library appears not to be working properly based on the
results from the test code TestIK.
3. The MgcTerrain library should have an MgcTerrain class wrapper that
manages a collection of terrain pages. The infrastructure does exist in
MgcTerrainPage to support the wrapper.
4. The MgcSorting library does not yet have code for handling portals.
5. The MgcNumerics library does not yet have code for solving some
systems of polynomial equations.
6. The MgcCurve and MgcSurface libraries do not yet have code for
handling B-splines.
7. The MgcAnimation library does not yet have MgcParticleController,
a base class for supporting particle systems.
8. The MgcContainment library does not have functions for merging
pairs of lozenges, cylinders, or ellipsoids.
9. The MgcIntersection library does not have functions for handling
moving objects other than bounding boxes. It is possible to use the
static intersection testers in a bisection-based system that measures
distance as a function of time.
10. Two renderers are planeed for Linux machines, one that is
OpenGL based (can use nVidia hardware) and a software renderer that uses
XWindows.
11. The software renderer for Windows illustrates a couple of
rasterizers. The library is structured so that it is easy to create
other rasterizers that an application might need without having to
change any infrastructure.
12. Microsoft Windows 2000 appears to have problems with the call to
get the current time. The time appears not to increase, but cycles
instead. In particular this shows up in the TestMorphController test
code.
13. There is a crash bug in the TestKeyframeController test code,
release build, when the program terminates. The crash does not occur
in the debug build.
14. The TestTriangleNetwork test code creates Magic images that can
be viewed with Viewer24.exe in the ImageSDK/bin directory. You need
to run the executable from a command prompt and supply an image file
name.
I am not a fan of fancy names, but I guess it is about time to do some
branding. So I have given the engine a name. That name, "Wild Magic",
while sharing part of the company name is also a reference to the Thomas
Covenant novels written by Stephen R. Donaldson. In my opinion he is the
best fantasy writer ever. I have lost count of the number of times I have
read the Covenant series. My hope is that someday he will write another
trilogy in that series. Or that there will be a movie about the current
books. Or that there will be a 3D game based on the series...
# ReleaseNotes0p2.txt
Release Notes for Wild Magic Version 0.2
(Update from Version 0.1 to Version 0.2)
If your copy of the book has Version 0.1 and if you downloaded
Version 0.2 from the web site, then apply the following
directions for installing the update. For a Linux installation,
see the section at the end of this document.
UPDATE DIRECTIONS.
Assuming that the top level directory is called MAGIC (replace
by your top level name), you should have the Version 0.1 contents
in this location.
1. Delete the contents of MAGICInclude.
2. Delete the subdirectory MAGICSourceMgcApplication.
3. Delete the obsolete files:
a. MAGICSourceMgcSortingMgcBspTriangle.cpp
b. MAGICSourceMgcGPRendererMgcGLCamera.txt
c. MAGICSourceMgcOglRendererMgcOglState.cpp
d. MAGICSourceMgcEngineMgcControllerMacros.h
e. Delete the BMP files in the Test projects. The
applications now use MIF files (see MgcImage.h)
to run in either MS Windows or Linux.
4. Unzip the Version 0.2 zip file to MAGIC, making sure
you have 'use folder names' selected.
Microsoft Windows
5. Open the workspace MAGICSourceFullBuild.dsw and build either or
both configurations.
6. Open the project MAGICSourceMgcApplicationWinMgcApplication.dsp
and build either or both configurations. This is an MS Windows
specific implementation of the application layer and creates the
library MgcWinApplication.lib.
7. Open the project MAGICSourceMgcApplicationGlutMgcApplication.dsp
and build either or both configurations. This is a GLUT specific
implementation of the application layer and creates the library
MgcGlutApplication.lib.
8. Open the workspace MAGICTestFullBuild.dsw and build either or
both configurations.
Linux
5. Run 'make' in the MAGICSource directory and build either or
both configurations.
6. Make a single MgcApplication directory using the files currently
there and move the Glut subdirectory files to it and build this as a
single library. Delete the Glut subdirectory since you will not need
it anymore. Run 'make' in the MAGICSourceMgcApplication
directory and build either or both configurations.
7. Run 'make' in the MAGICTest directory and build either or both
configurations.
-----------------------------------------------------------------------------
CHANGES.
1. MgcIntrPlnLoz.cpp
a. Line 40 was: fTmp01 -= rkPlane.Constant();
line should be deleted
b. Line 41 was: if ( fTmp00*fTmp10 <= 0.0 )
should be: if ( fTmp00*fTmp01 <= 0.0 )
2. a. Remove MgcSorting/MgcBspTriangle.cpp
b. Remove MgcGPRenderer/MgcGLCamera.txt
c. Remove MgcOglRenderer/MgcOglState.cpp
3. Removed obsolete MgcControllerMacros.h and
added MgcVertexColorState.h to MgcEngine.pkg
4. MgcMinimize1D.cpp
The constructor had 'assert(m_oF)' instead of 'assert(oF)'.
5. MgcDistVec2Elp2.cpp
The MgcDistance function had 'MgcMath::Sqrt(MgcDistance...'
instead of the correct 'MgcMath::Sqrt(MgcSqrDistance'.
6. Added heap template classes MgcTHeap.{h,inl} and
MgcTClassHeap.{h,inl} to MgcCore library.
7. Rename MgcCLodMesh and MgcDLodNode to MgcClodMesh and MgcDlodNode.
8. Changed the dsp project files to use include paths to the
dependent source directories, not to the SDK include directory.
This avoids having to hit 'build' twice in a row.
9. Updated the package files MgcCore.pkg and MgcDetail.pkg.
10. Removed ExtractAngle from MgcMatrix3. Added 'const' to
ToEulerAngles*** member functions.
11. Fixed a bug in the increasing-sort function in MgcEigen.cpp.
12. Added member functions AddUnique, ReverseOrder, and Contains
to MgcTList and MgcTClassList.
13. MgcMaterialState was changed to have an explicit alpha value.
However, it was neither exposed via the public interface nor
was it streamed. This has been fixed. The scene graph files
biped.mgc and sneeze.mgc were updated to support the alpha
value.
14. The continuous level of detail library was modified to an
acceptable point. The library supports both the Garland-Heckbert
quadric error metric and a metric based on edge length and
triangle area. The test project TestClodMesh shows an
example.
15. The inverse kinematics library was modified to an acceptable
point. The incremental updates do translation and rotation
a dimension at a time. Thus, the system uses Euler angles
(yuk). It is possible to set up an IK system that does not
(planned). The test project TestIK shows an example.
16. Minor changes to MgcGPEdgeBuffers.cpp and MgcGPRenderMesh.cpp
to fix g++ warnings on Linux.
17. Changed MgcStream.inl to support big endian architextures. On
such a platform, the makefile needs to define MGC_BIG_ENDIAN.
Native data in files will always be in little endian format.
18. Added MgcGlutRenderer project that uses GLUT. This project is
portable on a PC with either Microsoft Windows or Linux.
19. Added test project TestGlut that works for either Microsoft
Windows or Linux.
20. Added makefiles for the libraries on a Linux platform.
21. Added the portal code to the MgcSorting library. Includes
adding the streaming code to already existing class MgcBspNode.
The test project is Test/TestPortal. MgcSorting.pkg was updated
with the new header files.
22. Removed m_bConstructed member from MgcRenderer class.
23. Made MgcConvexRegionManager a friend of MgcSpatial to call
protected Draw function (portal system support).
24. Added support for additional culling planes in MgcCamera.
25. Added GetContainingNode to MgcBspNode to support point-in-
region query (supports the portal system). Fixed bug in
the Draw routine. Child 1 was used instead of child 2 for
the right child.
26. MgcApplication.cpp has pragmas that link in all libraries
so that the applications do not have to bother with always
setting the project settings with specific libraries.
27. MgcNode::DetachChildAt had a smart pointer problem that was
causing crashes at program termination. The returned pointer
value really needed to be a smart pointer, not a regular
pointer.
28. Removed the MgcCamera destructor stub (did not do anything).
29. MgcOglTextureState.cpp had code that always loaded images
and mipmaps every time the textures state was set. This has
been changed so that the images/mipmaps are loaded the first
time. On subsequent visits, the bind texture call tells OpenGL
that the textures are already in memory.
30. Made reconstruction functions public in MgcGeometry.h.
31. MgcPolyline.{h,cpp} now support normals and textures.
32. Added MgcPolypoint.{h,cpp,inl} and MgcParticles.{h,cpp,inl}
to support point and particle systems. MgcRenderer.h has
new virtual Draw routines for these systems.
MgcOglRenderer.{h,cpp} and MgcGlutRenderer.{h,cpp} have
implementations of the new Draw routines. MgcEngine.pkg
has includes of the new header files.
33. MgcSkinController, MgcMorphController, MgcKeyframeController,
and MgcIKController constructors no longer take the MgcObject*
parameter. The object is setup via SetObject when
AttachControl(MgcObject*) is called by the application.
34. Added TestPoint and TestParticle projects.
35. Implemented streaming in classes that had not done so:
MgcDlodNode, MgcSwitchNode, MgcTerrainPage, MgcBezierCylinder,
MgcBezierMesh, MgcBezierPatch, MgcTubeSurface,
MgcVertexColorState. Update the Load/Save code in MgcCamera
with the additional world culling planes.
36. Removed streaming code from the renderers and added a check
in MgcStream::Insert to make sure you cannot stream renderers.
37. Changed the MgcImplementRootStream macro so it does not take
the classname parameter.
38. Added dependency on MgcGlutRenderer to FullBuild.dsw.
Remove MgcApplication from FullBuild.dsw.
39. Made MgcApplication API platform independent. Two
implementations, one for GLUT, one for MS Windows.
Got rid of the status bar. Frame rate can be drawn
directly in the rendering window.
40. Added Draw routine to the OpenGL and GLUT renderers for text.
41. Fixed memory leak in MgcIKController.cpp (goals and joints
were not being deleted on destruction).
42. Added load/save code to MgcImage for Magic Image file
format MIF (avoids dependency on platform like BMP files).
43. Added converter from 24-bit BMP to MIF (Tools/Bmp24ToMif).
44. MgcCommand identifier names changed to conform to coding
standards. Had to initialize m_abUsed. Member functions
String and Filename now *allocate* the strings rather
than rely on the application to provide a large-enough
buffer.
45. Rewrote 'Test' applications to use the platform-independent
API for MgcApplication. Programs now compile as-is on
either MS Windows or Red Hat Linux.
46. Delete SourceMgcApplication in Version 0.1 and replace
by SourceMgcApplication in Version 0.2. The files
MgcTurret.{h,cpp} are obsolete.
47. Added a FullBuild workspace for the Test projects.
-----------------------------------------------------------------------------
GETTING STARTED ON A PC WITH LINUX
The procedures below worked for me in the following environment
* Pentium II 266 Mhz computer, CD-ROM, hard drive, ATI Rage 128 graphics
* Red Hat Linux 6.0 (kernel 2.2.5-15 on an i686)
1. Copy the files from the CD-ROM to a hard drive. To mount the CD-ROM
drive, use
mount -t iso9660 /dev/cdrom /mnt
The top level directory on the CD-ROM is mapped to
/mnt/cdrom/Wild Magic 0.2
Once you have the CD-ROM mounted, copy the files to the hard drive and
preserve the directory structure. Linux is case sensitive, so take care
not to change case of letters on files or directories. For the remainder
of this document, I assume that the path to where you put the CD-ROM
contents is stored in an environment variable named MAGIC.
2. You need some form of OpenGL and GLUT on your machine. I downloaded
Mesa packages from the Red Hat site (www.redhat.com):
Mesa-3.2-2.i686.rpm
Mesa-devel-3.2-2.i686.rpm
Mesa-glut-3.1-1.i686.rpm
and used the Gnome RPM tool to install them. I told the tool to ignore
the fact that GLUT is 3.1 and Mesa is 3.2. The installation puts the
libraries in /usr/X11R6/lib and the headers in /usr/X11R6/include. My
makefiles for applications use the libraries libGL.la, libGLU.la, and
libglut.la.
3. The top level makefile is $(MAGIC)/Source/makefile. You have four
options:
make CONFIG=Debug [build debug version]
make CONFIG=Release [build release version]
make clean CONFIG=Debug [remove debug object and library files]
make clean CONFIG=Release [remove release object and library files]
The makefile simply changes directory into each source subdirectory and
executes the makefile in that subdirectory. The following directories
are generated by the make:
$(MAGIC)/Include
$(MAGIC)/Library
$(MAGIC)/Library/Debug
$(MAGIC)/Library/Release
$(MAGIC)/Object
$(MAGIC)/Object/Debug
$(MAGIC)/Object/Release
These directories contain the header files (*.h), object files (*.o),
and library files (*.a) that can be used by applications. The object
files or libraries can be linked to an application as needed.
NOTE. The compilation of MgcGlutRenderer generates warnings about a
conflict between the 'exit' prototypes in glut.h and stdlib.h. The
standard library has a prototype that ties in which exception handler
should be used with 'exit'. The glut.h file includes an
'extern void exit(void)' since this function is needed to terminate
a program due to glutMainLoop() taking control of the event loop. I
believe this warning can be safely ignored.
4. To test the Linux installation, build and run the applications
in the $(MAGIC)/Test subdirectories. Each subdirectory with a
makefile will run on a Linux box. Execute the makefile as one
of the following:
make CONFIG=Debug
make CONFIG=Release
Release Notes for Wild Magic Version 0.1
This CD-ROM contains the initial release of the source code that accompanies
the book "3D Game Engine Design: A Practical Approach to Real-Time
Computer Graphics". There are a number of known issues about the code. As
these issues are addressed, the updated code will be available at the
website http://www.magic-software.com/3DGameEngineDesign.html. Bugs,
suggestions for improvements, and other correspondence can be sent to
[email protected].
The current known issues are
1. Mesh algorithm for continuous level of detail appears not
to be working based on the results from the test code TestClodMesh.
2. The MgcIK library appears not to be working properly based on the
results from the test code TestIK.
3. The MgcTerrain library should have an MgcTerrain class wrapper that
manages a collection of terrain pages. The infrastructure does exist in
MgcTerrainPage to support the wrapper.
4. The MgcSorting library does not yet have code for handling portals.
5. The MgcNumerics library does not yet have code for solving some
systems of polynomial equations.
6. The MgcCurve and MgcSurface libraries do not yet have code for
handling B-splines.
7. The MgcAnimation library does not yet have MgcParticleController,
a base class for supporting particle systems.
8. The MgcContainment library does not have functions for merging
pairs of lozenges, cylinders, or ellipsoids.
9. The MgcIntersection library does not have functions for handling
moving objects other than bounding boxes. It is possible to use the
static intersection testers in a bisection-based system that measures
distance as a function of time.
10. Two renderers are planeed for Linux machines, one that is
OpenGL based (can use nVidia hardware) and a software renderer that uses
XWindows.
11. The software renderer for Windows illustrates a couple of
rasterizers. The library is structured so that it is easy to create
other rasterizers that an application might need without having to
change any infrastructure.
12. Microsoft Windows 2000 appears to have problems with the call to
get the current time. The time appears not to increase, but cycles
instead. In particular this shows up in the TestMorphController test
code.
13. There is a crash bug in the TestKeyframeController test code,
release build, when the program terminates. The crash does not occur
in the debug build.
14. The TestTriangleNetwork test code creates Magic images that can
be viewed with Viewer24.exe in the ImageSDK/bin directory. You need
to run the executable from a command prompt and supply an image file
name.
I am not a fan of fancy names, but I guess it is about time to do some
branding. So I have given the engine a name. That name, "Wild Magic",
while sharing part of the company name is also a reference to the Thomas
Covenant novels written by Stephen R. Donaldson. In my opinion he is the
best fantasy writer ever. I have lost count of the number of times I have
read the Covenant series. My hope is that someday he will write another
trilogy in that series. Or that there will be a movie about the current
books. Or that there will be a 3D game based on the series...
# ReleaseNotes0p2.txt
Release Notes for Wild Magic Version 0.2
(Update from Version 0.1 to Version 0.2)
If your copy of the book has Version 0.1 and if you downloaded
Version 0.2 from the web site, then apply the following
directions for installing the update. For a Linux installation,
see the section at the end of this document.
UPDATE DIRECTIONS.
Assuming that the top level directory is called MAGIC (replace
by your top level name), you should have the Version 0.1 contents
in this location.
1. Delete the contents of MAGICInclude.
2. Delete the subdirectory MAGICSourceMgcApplication.
3. Delete the obsolete files:
a. MAGICSourceMgcSortingMgcBspTriangle.cpp
b. MAGICSourceMgcGPRendererMgcGLCamera.txt
c. MAGICSourceMgcOglRendererMgcOglState.cpp
d. MAGICSourceMgcEngineMgcControllerMacros.h
e. Delete the BMP files in the Test projects. The
applications now use MIF files (see MgcImage.h)
to run in either MS Windows or Linux.
4. Unzip the Version 0.2 zip file to MAGIC, making sure
you have 'use folder names' selected.
Microsoft Windows
5. Open the workspace MAGICSourceFullBuild.dsw and build either or
both configurations.
6. Open the project MAGICSourceMgcApplicationWinMgcApplication.dsp
and build either or both configurations. This is an MS Windows
specific implementation of the application layer and creates the
library MgcWinApplication.lib.
7. Open the project MAGICSourceMgcApplicationGlutMgcApplication.dsp
and build either or both configurations. This is a GLUT specific
implementation of the application layer and creates the library
MgcGlutApplication.lib.
8. Open the workspace MAGICTestFullBuild.dsw and build either or
both configurations.
Linux
5. Run 'make' in the MAGICSource directory and build either or
both configurations.
6. Make a single MgcApplication directory using the files currently
there and move the Glut subdirectory files to it and build this as a
single library. Delete the Glut subdirectory since you will not need
it anymore. Run 'make' in the MAGICSourceMgcApplication
directory and build either or both configurations.
7. Run 'make' in the MAGICTest directory and build either or both
configurations.
-----------------------------------------------------------------------------
CHANGES.
1. MgcIntrPlnLoz.cpp
a. Line 40 was: fTmp01 -= rkPlane.Constant();
line should be deleted
b. Line 41 was: if ( fTmp00*fTmp10 <= 0.0 )
should be: if ( fTmp00*fTmp01 <= 0.0 )
2. a. Remove MgcSorting/MgcBspTriangle.cpp
b. Remove MgcGPRenderer/MgcGLCamera.txt
c. Remove MgcOglRenderer/MgcOglState.cpp
3. Removed obsolete MgcControllerMacros.h and
added MgcVertexColorState.h to MgcEngine.pkg
4. MgcMinimize1D.cpp
The constructor had 'assert(m_oF)' instead of 'assert(oF)'.
5. MgcDistVec2Elp2.cpp
The MgcDistance function had 'MgcMath::Sqrt(MgcDistance...'
instead of the correct 'MgcMath::Sqrt(MgcSqrDistance'.
6. Added heap template classes MgcTHeap.{h,inl} and
MgcTClassHeap.{h,inl} to MgcCore library.
7. Rename MgcCLodMesh and MgcDLodNode to MgcClodMesh and MgcDlodNode.
8. Changed the dsp project files to use include paths to the
dependent source directories, not to the SDK include directory.
This avoids having to hit 'build' twice in a row.
9. Updated the package files MgcCore.pkg and MgcDetail.pkg.
10. Removed ExtractAngle from MgcMatrix3. Added 'const' to
ToEulerAngles*** member functions.
11. Fixed a bug in the increasing-sort function in MgcEigen.cpp.
12. Added member functions AddUnique, ReverseOrder, and Contains
to MgcTList and MgcTClassList.
13. MgcMaterialState was changed to have an explicit alpha value.
However, it was neither exposed via the public interface nor
was it streamed. This has been fixed. The scene graph files
biped.mgc and sneeze.mgc were updated to support the alpha
value.
14. The continuous level of detail library was modified to an
acceptable point. The library supports both the Garland-Heckbert
quadric error metric and a metric based on edge length and
triangle area. The test project TestClodMesh shows an
example.
15. The inverse kinematics library was modified to an acceptable
point. The incremental updates do translation and rotation
a dimension at a time. Thus, the system uses Euler angles
(yuk). It is possible to set up an IK system that does not
(planned). The test project TestIK shows an example.
16. Minor changes to MgcGPEdgeBuffers.cpp and MgcGPRenderMesh.cpp
to fix g++ warnings on Linux.
17. Changed MgcStream.inl to support big endian architextures. On
such a platform, the makefile needs to define MGC_BIG_ENDIAN.
Native data in files will always be in little endian format.
18. Added MgcGlutRenderer project that uses GLUT. This project is
portable on a PC with either Microsoft Windows or Linux.
19. Added test project TestGlut that works for either Microsoft
Windows or Linux.
20. Added makefiles for the libraries on a Linux platform.
21. Added the portal code to the MgcSorting library. Includes
adding the streaming code to already existing class MgcBspNode.
The test project is Test/TestPortal. MgcSorting.pkg was updated
with the new header files.
22. Removed m_bConstructed member from MgcRenderer class.
23. Made MgcConvexRegionManager a friend of MgcSpatial to call
protected Draw function (portal system support).
24. Added support for additional culling planes in MgcCamera.
25. Added GetContainingNode to MgcBspNode to support point-in-
region query (supports the portal system). Fixed bug in
the Draw routine. Child 1 was used instead of child 2 for
the right child.
26. MgcApplication.cpp has pragmas that link in all libraries
so that the applications do not have to bother with always
setting the project settings with specific libraries.
27. MgcNode::DetachChildAt had a smart pointer problem that was
causing crashes at program termination. The returned pointer
value really needed to be a smart pointer, not a regular
pointer.
28. Removed the MgcCamera destructor stub (did not do anything).
29. MgcOglTextureState.cpp had code that always loaded images
and mipmaps every time the textures state was set. This has
been changed so that the images/mipmaps are loaded the first
time. On subsequent visits, the bind texture call tells OpenGL
that the textures are already in memory.
30. Made reconstruction functions public in MgcGeometry.h.
31. MgcPolyline.{h,cpp} now support normals and textures.
32. Added MgcPolypoint.{h,cpp,inl} and MgcParticles.{h,cpp,inl}
to support point and particle systems. MgcRenderer.h has
new virtual Draw routines for these systems.
MgcOglRenderer.{h,cpp} and MgcGlutRenderer.{h,cpp} have
implementations of the new Draw routines. MgcEngine.pkg
has includes of the new header files.
33. MgcSkinController, MgcMorphController, MgcKeyframeController,
and MgcIKController constructors no longer take the MgcObject*
parameter. The object is setup via SetObject when
AttachControl(MgcObject*) is called by the application.
34. Added TestPoint and TestParticle projects.
35. Implemented streaming in classes that had not done so:
MgcDlodNode, MgcSwitchNode, MgcTerrainPage, MgcBezierCylinder,
MgcBezierMesh, MgcBezierPatch, MgcTubeSurface,
MgcVertexColorState. Update the Load/Save code in MgcCamera
with the additional world culling planes.
36. Removed streaming code from the renderers and added a check
in MgcStream::Insert to make sure you cannot stream renderers.
37. Changed the MgcImplementRootStream macro so it does not take
the classname parameter.
38. Added dependency on MgcGlutRenderer to FullBuild.dsw.
Remove MgcApplication from FullBuild.dsw.
39. Made MgcApplication API platform independent. Two
implementations, one for GLUT, one for MS Windows.
Got rid of the status bar. Frame rate can be drawn
directly in the rendering window.
40. Added Draw routine to the OpenGL and GLUT renderers for text.
41. Fixed memory leak in MgcIKController.cpp (goals and joints
were not being deleted on destruction).
42. Added load/save code to MgcImage for Magic Image file
format MIF (avoids dependency on platform like BMP files).
43. Added converter from 24-bit BMP to MIF (Tools/Bmp24ToMif).
44. MgcCommand identifier names changed to conform to coding
standards. Had to initialize m_abUsed. Member functions
String and Filename now *allocate* the strings rather
than rely on the application to provide a large-enough
buffer.
45. Rewrote 'Test' applications to use the platform-independent
API for MgcApplication. Programs now compile as-is on
either MS Windows or Red Hat Linux.
46. Delete SourceMgcApplication in Version 0.1 and replace
by SourceMgcApplication in Version 0.2. The files
MgcTurret.{h,cpp} are obsolete.
47. Added a FullBuild workspace for the Test projects.
-----------------------------------------------------------------------------
GETTING STARTED ON A PC WITH LINUX
The procedures below worked for me in the following environment
* Pentium II 266 Mhz computer, CD-ROM, hard drive, ATI Rage 128 graphics
* Red Hat Linux 6.0 (kernel 2.2.5-15 on an i686)
1. Copy the files from the CD-ROM to a hard drive. To mount the CD-ROM
drive, use
mount -t iso9660 /dev/cdrom /mnt
The top level directory on the CD-ROM is mapped to
/mnt/cdrom/Wild Magic 0.2
Once you have the CD-ROM mounted, copy the files to the hard drive and
preserve the directory structure. Linux is case sensitive, so take care
not to change case of letters on files or directories. For the remainder
of this document, I assume that the path to where you put the CD-ROM
contents is stored in an environment variable named MAGIC.
2. You need some form of OpenGL and GLUT on your machine. I downloaded
Mesa packages from the Red Hat site (www.redhat.com):
Mesa-3.2-2.i686.rpm
Mesa-devel-3.2-2.i686.rpm
Mesa-glut-3.1-1.i686.rpm
and used the Gnome RPM tool to install them. I told the tool to ignore
the fact that GLUT is 3.1 and Mesa is 3.2. The installation puts the
libraries in /usr/X11R6/lib and the headers in /usr/X11R6/include. My
makefiles for applications use the libraries libGL.la, libGLU.la, and
libglut.la.
3. The top level makefile is $(MAGIC)/Source/makefile. You have four
options:
make CONFIG=Debug [build debug version]
make CONFIG=Release [build release version]
make clean CONFIG=Debug [remove debug object and library files]
make clean CONFIG=Release [remove release object and library files]
The makefile simply changes directory into each source subdirectory and
executes the makefile in that subdirectory. The following directories
are generated by the make:
$(MAGIC)/Include
$(MAGIC)/Library
$(MAGIC)/Library/Debug
$(MAGIC)/Library/Release
$(MAGIC)/Object
$(MAGIC)/Object/Debug
$(MAGIC)/Object/Release
These directories contain the header files (*.h), object files (*.o),
and library files (*.a) that can be used by applications. The object
files or libraries can be linked to an application as needed.
NOTE. The compilation of MgcGlutRenderer generates warnings about a
conflict between the 'exit' prototypes in glut.h and stdlib.h. The
standard library has a prototype that ties in which exception handler
should be used with 'exit'. The glut.h file includes an
'extern void exit(void)' since this function is needed to terminate
a program due to glutMainLoop() taking control of the event loop. I
believe this warning can be safely ignored.
4. To test the Linux installation, build and run the applications
in the $(MAGIC)/Test subdirectories. Each subdirectory with a
makefile will run on a Linux box. Execute the makefile as one
of the following:
make CONFIG=Debug
make CONFIG=Release
Download the book Wild Magic 0.2 (CD with example C++ source code for 3D Game Engine Design: A Practical Approach to Real-Time Computer Graphics) for free or read online
Continue reading on any device:
Last viewed books
Related books
{related-news}
Comments (0)