Panda3D

config_egg.cxx

00001 // Filename: config_egg.cxx
00002 // Created by:  drose (19Mar00)
00003 //
00004 ////////////////////////////////////////////////////////////////////
00005 //
00006 // PANDA 3D SOFTWARE
00007 // Copyright (c) Carnegie Mellon University.  All rights reserved.
00008 //
00009 // All use of this software is subject to the terms of the revised BSD
00010 // license.  You should have received a copy of this license along
00011 // with this source code in a file named "LICENSE."
00012 //
00013 ////////////////////////////////////////////////////////////////////
00014 
00015 #include "config_egg.h"
00016 #include "eggRenderMode.h"
00017 #include "eggAnimData.h"
00018 #include "eggAnimPreload.h"
00019 #include "eggAttributes.h"
00020 #include "eggBin.h"
00021 #include "eggBinMaker.h"
00022 #include "eggComment.h"
00023 #include "eggCompositePrimitive.h"
00024 #include "eggCoordinateSystem.h"
00025 #include "eggCurve.h"
00026 #include "eggExternalReference.h"
00027 #include "eggFilenameNode.h"
00028 #include "eggGroup.h"
00029 #include "eggGroupNode.h"
00030 #include "eggGroupUniquifier.h"
00031 #include "eggLine.h"
00032 #include "eggMaterial.h"
00033 #include "eggNameUniquifier.h"
00034 #include "eggNamedObject.h"
00035 #include "eggNode.h"
00036 #include "eggNurbsCurve.h"
00037 #include "eggNurbsSurface.h"
00038 #include "eggObject.h"
00039 #include "eggPoint.h"
00040 #include "eggPolygon.h"
00041 #include "eggPolysetMaker.h"
00042 #include "eggPoolUniquifier.h"
00043 #include "eggPrimitive.h"
00044 #include "eggSAnimData.h"
00045 #include "eggSurface.h"
00046 #include "eggSwitchCondition.h"
00047 #include "eggTable.h"
00048 #include "eggTexture.h"
00049 #include "eggTriangleFan.h"
00050 #include "eggTriangleStrip.h"
00051 #include "eggUserData.h"
00052 #include "eggVertex.h"
00053 #include "eggVertexPool.h"
00054 #include "eggVertexUV.h"
00055 #include "eggVertexAux.h"
00056 #include "eggXfmAnimData.h"
00057 #include "eggXfmSAnim.h"
00058 
00059 #include "dconfig.h"
00060 
00061 Configure(config_egg);
00062 NotifyCategoryDef(egg, "");
00063 
00064 ConfigureFn(config_egg) {
00065   init_libegg();
00066 }
00067 
00068 ConfigVariableBool egg_support_old_anims
00069 ("egg-support-old-anims", true,
00070  PRC_DESC("Set this true to support loading of old character animation files, which "
00071           "had the convention that the order \"phr\" implied a reversed roll."));
00072 
00073 ConfigVariableBool egg_mesh
00074 ("egg-mesh", true,
00075  PRC_DESC("Set this true to convert triangles and higher-order polygons "
00076           "into triangle strips and triangle fans when an egg file is "
00077           "loaded or converted to bam.  Set this false just to triangulate "
00078           "everything into independent triangles."));
00079 
00080 ConfigVariableBool egg_retesselate_coplanar
00081 ("egg-retesselate-coplanar", false,
00082  PRC_DESC("If this is true, the egg loader may reverse the "
00083           "tesselation direction of a single pair of planar triangles that "
00084           "share the same properties, if that will help get a better "
00085           "triangle strip.  In some rare cases, doing so can distort the "
00086           "UV's on a face; turning this off should eliminate that artifact "
00087           "(at the cost of less-effective triangle stripping)."));
00088 
00089 ConfigVariableBool egg_unroll_fans
00090 ("egg-unroll-fans", true,
00091  PRC_DESC("Set this true to allow the egg loader to convert weak triangle "
00092           "fans--triangles that share the same vertex but aren't "
00093           "connected enough to justify making a triangle fan primitive "
00094           "from them--into a series of zig-zag triangles that can make "
00095           "a triangle strip that might connect better with its neighbors."));
00096 
00097 ConfigVariableBool egg_show_tstrips
00098 ("egg-show-tstrips", false,
00099  PRC_DESC("Set this true to color each triangle strip a random color, with "
00100           "the leading triangle a little bit darker, so you can visually "
00101           "observe the quality of the triangle stripping algorithm."));
00102 
00103 ConfigVariableBool egg_show_qsheets
00104 ("egg-show-qsheets", false,
00105  PRC_DESC("Set this true to color each quadsheet a random color, so you "
00106           "can visually observe the quadsheet algorithm."));
00107 
00108 ConfigVariableBool egg_show_quads
00109 ("egg-show-quads", false,
00110  PRC_DESC("Set this true to color each detected quad a random color, so "
00111           "you can visually observe the algorithm that unifies pairs of "
00112           "triangles into quads (prior to generating triangle strips)."));
00113 
00114 ConfigVariableBool egg_subdivide_polys
00115 ("egg-subdivide-polys", true,
00116  PRC_DESC("This is obsolete.  In the old Geom implementation, it used to "
00117           "be true to force higher-order polygons that were not otherwise "
00118           "meshed to be subdivided into triangles.  In the new "
00119           "Geom implementation, this happens anyway."));
00120 
00121 ConfigVariableBool egg_consider_fans
00122 ("egg-consider-fans", false,
00123  PRC_DESC("Set this true to enable the egg mesher to consider making "
00124           "triangle fans out of triangles that are connected at a common "
00125           "vertex.  This may help if your scene involves lots of such "
00126           "connected triangles, but it can also make the overall stripping "
00127           "less effective (by interfering with triangle strips)."));
00128  
00129 ConfigVariableDouble egg_max_tfan_angle
00130 ("egg-max-tfan-angle", 40.0,
00131  PRC_DESC("The maximum average angle per triangle to allow in a triangle "
00132           "fan.  If triangles are larger than this--that is, more loosely "
00133           "packed--then we figure a triangle strip is likely to do a "
00134           "more effective job than a triangle fan, and the fan maker leaves "
00135           "it alone."));
00136 
00137 ConfigVariableInt egg_min_tfan_tris
00138 ("egg-min-tfan-tris", 4,
00139  PRC_DESC("The minimum number of triangles that must be involved in order "
00140           "to generate a triangle fan.  Fewer than this is just interrupting "
00141           "a triangle strip."));
00142 
00143 ConfigVariableDouble egg_coplanar_threshold
00144 ("egg-coplanar-threshold", 0.01,
00145  PRC_DESC("The numerical threshold below which polygons are considered "
00146           "to be coplanar.  Determined empirically."));
00147 
00148 ConfigVariableInt egg_test_vref_integrity
00149 ("egg-test-vref-integrity", 20,
00150  PRC_DESC("The maximum number of vertices a primitive may have before "
00151           "its vertices will no longer be checked for internal integrity.  "
00152           "This is meaningful in non-production builds only."));
00153 
00154 ConfigVariableInt egg_recursion_limit
00155 ("egg-recursion-limit", 1000,
00156  PRC_DESC("The maximum number of levels that recursive algorithms within "
00157           "the egg library are allowed to traverse.  This is a simple hack "
00158           "to prevent deeply-recursive algorithms from triggering a stack "
00159           "overflow.  Set it larger to run more efficiently if your stack "
00160           "allows it; set it lower if you experience stack overflows."));
00161 
00162 ////////////////////////////////////////////////////////////////////
00163 //     Function: init_libegg
00164 //  Description: Initializes the library.  This must be called at
00165 //               least once before any of the functions or classes in
00166 //               this library can be used.  Normally it will be
00167 //               called by the static initializers and need not be
00168 //               called explicitly, but special cases exist.
00169 ////////////////////////////////////////////////////////////////////
00170 void
00171 init_libegg() {
00172   static bool initialized = false;
00173   if (initialized) {
00174     return;
00175   }
00176   initialized = true;
00177 
00178   EggRenderMode::init_type();
00179   EggAnimData::init_type();
00180   EggAnimPreload::init_type();
00181   EggAttributes::init_type();
00182   EggBin::init_type();
00183   EggBinMaker::init_type();
00184   EggComment::init_type();
00185   EggCompositePrimitive::init_type();
00186   EggCoordinateSystem::init_type();
00187   EggCurve::init_type();
00188   EggData::init_type();
00189   EggExternalReference::init_type();
00190   EggFilenameNode::init_type();
00191   EggGroup::init_type();
00192   EggGroupNode::init_type();
00193   EggGroupUniquifier::init_type();
00194   EggLine::init_type();
00195   EggMaterial::init_type();
00196   EggNameUniquifier::init_type();
00197   EggNamedObject::init_type();
00198   EggNode::init_type();
00199   EggNurbsCurve::init_type();
00200   EggNurbsSurface::init_type();
00201   EggObject::init_type();
00202   EggPoint::init_type();
00203   EggPolygon::init_type();
00204   EggPolysetMaker::init_type();
00205   EggPoolUniquifier::init_type();
00206   EggPrimitive::init_type();
00207   EggSAnimData::init_type();
00208   EggSurface::init_type();
00209   EggSwitchCondition::init_type();
00210   EggSwitchConditionDistance::init_type();
00211   EggTable::init_type();
00212   EggTexture::init_type();
00213   EggTriangleFan::init_type();
00214   EggTriangleStrip::init_type();
00215   EggUserData::init_type();
00216   EggVertex::init_type();
00217   EggVertexPool::init_type();
00218   EggVertexUV::init_type();
00219   EggVertexAux::init_type();
00220   EggXfmAnimData::init_type();
00221   EggXfmSAnim::init_type();
00222 }
 All Classes Functions Variables Enumerations