Wild Magic 0.2 (CD with example C++ source code for 3D Game Engine Design: A Practical Approach to Real-Time Computer Graphics)

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

# 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 MAGIC\Include. 2. Delete the subdirectory MAGIC\Source\MgcApplication. 3. Delete the obsolete files: a. MAGIC\Source\MgcSorting\MgcBspTriangle.cpp b. MAGIC\Source\MgcGPRenderer\MgcGLCamera.txt c. MAGIC\Source\MgcOglRenderer\MgcOglState.cpp d. MAGIC\Source\MgcEngine\MgcControllerMacros.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 MAGIC\Source\FullBuild.dsw and build either or both configurations. 6. Open the project MAGIC\Source\MgcApplication\Win\MgcApplication.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 MAGIC\Source\MgcApplication\Glut\MgcApplication.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 MAGIC\Test\FullBuild.dsw and build either or both configurations. Linux 5. Run 'make' in the MAGIC\Source 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 MAGIC\Source\MgcApplication directory and build either or both configurations. 7. Run 'make' in the MAGIC\Test 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 Source\MgcApplication in Version 0.1 and replace by Source\MgcApplication 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

Author(s): David H. Eberly
Edition: 2
Publisher: Morgan Kaufman
Year: 2000

Language: English
Commentary: This is just the accompanying CD with the source code, not the book itself.
Pages: 0
Tags: Computer graphics, Three-dimensional display systems, Real-time, game development, source code