devguide.txt
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:7k
源码类别:

OpenGL

开发平台:

Visual C++

  1. File Overview
  2. -------------
  3. * winmain.cpp
  4.   Windows front-end.  There's a lot of initialization code that should be
  5.   moved to a module that's not platform-specific.
  6. * simulation.cpp
  7.   The heart of Celestia . . .  handles tracking an observer moving through
  8.   the universe.
  9. * render.cpp
  10.   The Renderer class.  Everything on the screen is put there by an instance
  11.   of Renderer.
  12. * bigfix.cpp
  13.   High precision (128-bit) fixed point numbers.
  14. * univcoord.cpp
  15.   UnivseralCoord class--a 3-vector with BigFix components.  Represents
  16.   positions over a range of billions of light years to about
  17.   millimeter resolution.
  18. * observer.cpp
  19.   This class is a package for position, orientation, and velocity.  The
  20.   position of the observer is a UniversalCoord.
  21. * octree.cpp
  22.   Octree is a class used to determine which stars from are visible to an
  23.   Observer
  24. * stellarclass.cpp
  25. * starname.cpp
  26. * star.cpp
  27. * stardb.cpp
  28.   Everything to do with stars.  StarDatabase contains a list of Stars and a
  29.   list of StarNames.
  30. * constellation.cpp
  31.   Just a bunch of static data giving the names and official abbreviations of
  32.   the 88 recognized constellations.
  33. * orbit.cpp
  34.   The Orbit base class has a single method to compute the barycentric position
  35.   of an object at a given Julian Date.  Currently, the only subclass of Orbit
  36.   is EllipticalOrbit, which calculates the position of an object along an
  37.   orbit specified by the standard six orbital elements.
  38. * body.cpp
  39.   A planet, moon, probe, etc.  Pretty much anything in space other than
  40.   a star is a Body.  A PlanetarySystem is a list of bodies.
  41. * solarsys.cpp
  42.   SolarSystem and SolarSystemCatalog classes.
  43. * mesh.cpp
  44. * spheremesh.cpp
  45. * 3dsmesh.cpp
  46. * vertexlist.cpp
  47.   These files are all related to internal geometry representation.
  48.   Mesh is an abstract class from which SphereMesh and Mesh3DS are derived.
  49.   VertexList is basically an easy to use wrapper for OpenGL 1.1 vertex arrays.
  50.   Eventually, VertexList will be made a subclass of mesh (SimpleMesh) and
  51.   Mesh3DS will be replaced by a more general class, CompositeMesh, which is
  52.   just a container for multiple Meshes.
  53. * surface.h
  54.   An aggregation of surface properties that may be applied to a mesh.
  55. * texture.cpp
  56.   An OpenGL texture class.
  57. * tokenizer.cpp
  58. * parser.cpp
  59.   The tokenizer and parser for Celestia text files (including the config file,
  60.   the solar system catalogs, and Celestia procedural meshes)
  61. * resmanager.cpp
  62. * texmanager.cpp
  63. * meshmanager.cpp
  64.   Resource management.  Resource manager is an abstract class from which
  65.   TextureManager and MeshManager are derived.  Right now, there isn't much
  66.   in the way of actual management done, but having these classes around
  67.   makes it much easier to implement a more sophisticated texture manager
  68.   in the future.
  69. * 3dschunk.h
  70. * 3dsread.cpp
  71. * 3dsmodel.cpp
  72.   3DS mesh reading stuff.  Slurp a file and spits out a Mesh3DS.
  73. * console.cpp
  74.   GL text console class that supports both printf and C++ << style output.
  75. * perlin.cpp
  76.   Noise functions used for procedural geometry and textures.
  77. * regcombine.cpp
  78.   A few functions that make it easy to use nVidia's REGISTER_COMBINERS
  79.   extension.
  80. * color.cpp
  81.   Simple RGBA color class.
  82. * astro.cpp
  83.   Astronomical conversions and a Date class for converting from dd/mm/yyyy
  84.   to Julian date.
  85. * vecmath.h
  86.   Templatized classes for Points, Vectors, and Matrices
  87. * quaternion.h
  88.   Templatized quaternion class
  89. * vecgl.h
  90.   A handful of template functions which make it easy to use types from
  91.   vecmath.h with OpenGL
  92. * aabox.h
  93.   Axis-aligned bounding box class.
  94. * glext.h
  95. * glext.cpp
  96.   GL extension declarations
  97. * filetype.cpp
  98.   A function for determining the type of a file based on its extension.
  99. * dispmap.cpp
  100.   Some silly code for applying displacement maps to SphereMeshes.
  101. * texfont.cpp
  102.   Mark J. Kilgard's texture font package
  103. * buildstardb.cpp
  104.   The program used to munge the HIPPARCOS data set into the star database.
  105.   If you wish to munge your own database, you will need to download a copy
  106.   of the HIPPARCOS database, it may be found at the URL:
  107.   ftp://cdsarc.u-strasbg.fr/cats/I/239
  108.   You will need the files hip_main.dat h_dm_com.dat hip_dm_o.da & tyc_main.dat
  109. The Star Database
  110. -----------------
  111. The main star database is data/stars.dat.  This contains about 112,000 stars,
  112. including most of the HIPPARCOS catalog, plus one addition: Sol, our
  113. sun.  The file starnames.dat contains proper names and Bayer and Flamsteed
  114. designations for about 1000 stars.  Every star in stars.dat has a unique
  115. identifier called its catalog number, and the name entries are linked with
  116. stars from the database via this number.
  117. The readStars function in celestiacore.cpp is responsible for loading the star
  118. database for Celestia.  Once initialized, the StarDatabase may be queried in
  119. one of three ways:  by star index, by catalog number, or by star name.  The
  120. star index is just the order of the star within the database, so lookup by
  121. index is a constant time operation.  Looking up a star by catalog number
  122. requires a search of the star database; since the database entries are sorted
  123. by catalog number, this is a log N operation.  All three query types return
  124. a pointer to a star from the database.
  125. Stars
  126. -----
  127. Since there are so many stars in a star database, it's important that the
  128. size of the Star class be kept to a minimum.  Thus, in order to avoid the 
  129. 4 byte vtable overhead Star is not a derived class, even though it might
  130. be somewhat useful to have a common base class for stars and planets.  All
  131. stars have a unique catalog number, a position, a stellar class, and a
  132. luminosity.  The radius, temperature, and color of a star are not stored,
  133. but are instead derived from stellar class and luminosity.  The position
  134. of a star is its cartesian ecliptical position in units of
  135. light years.  The catalog number of a star is generally it's HD number.  In
  136. cases where the star doesn't have an HD number, the lower 28 bits are the
  137. HIPPARCOS catalog number and the high 4 bits are 0x1.
  138. Celestia Overview
  139. -----------------
  140. The basic skeleton of Celestia looks like this:
  141. StarDatabase* stardb = ReadStars("data/stars.dat", "data/starnames.dat");
  142. SolarSystemCatalog* solarSystems = ReadSolarSystems("data/solarsys.ssc");
  143. Simulation* sim = new Simulation();
  144. sim->setStarDatabase(stardb);
  145. sim->setTime(now);
  146. Renderer renderer = new Renderer();
  147. renderer->init();
  148. for (;;)
  149. {
  150.     sim->update(tick);
  151.     sim->render(*renderer);
  152. }
  153. The platform specific stuff to create a GL window and update it has been
  154. omitted, as has any UI.
  155. Tracking Visible Stars
  156. ----------------------
  157. The VisibleStarSet class exists to limit the amount of computation spent
  158. determining which stars from a StarDatabase are visible to an Observer.  The
  159. fairly simple trick used to help alleviate the problem involves only checking a
  160. portion of the database for visibility at each update.
  161. UNIX
  162. ----
  163. To develop under Unix, you will probably need some of the following packages:
  164. autoconf, automake, and of course the usual array of c++ compilers/linkers.