lltreeparams.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:6k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file lltreeparams.h
  3.  * @brief Implementation of the LLTreeParams class
  4.  *
  5.  * $LicenseInfo:firstyear=2001&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2001-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_LLTREEPARAMS_H
  33. #define LL_LLTREEPARAMS_H 
  34. /* for information about formulas associated with each type
  35.  * check the Weber + Penn paper
  36.  */
  37. enum EShapeRatio { SR_CONICAL, SR_SPHERICAL, SR_HEMISPHERICAL, 
  38. SR_CYLINDRICAL, SR_TAPERED_CYLINDRICAL, SR_FLAME, 
  39. SR_INVERSE_CONICAL, SR_TEND_FLAME, SR_ENVELOPE};
  40. const U32 TREE_BLOCK_SIZE = 16;
  41. const U8 MAX_NUM_LEVELS = 4;
  42. class LLTreeParams  
  43. {
  44. public:
  45. LLTreeParams();
  46. virtual ~LLTreeParams();
  47. static F32 ShapeRatio(EShapeRatio shape, F32 ratio);
  48. public:
  49. // Variables with an asterick (*) cannot be modified without a re-instancing the
  50. // trunk/branches
  51. // Variables with an exclamation point (!) should probably not be modified outside and instead
  52. // be tied directly to the species
  53. // Variables with a tilde (~) should be tied to a range specified by the 
  54. // species type but still slightly controllable by the user
  55. // GENERAL
  56. //! determines length/radius of branches on tree -- ie: general 'shape' 
  57. EShapeRatio mShape;
  58. //! number of recursive branch levels...limit to MAX_NUM_LEVELS
  59. U8 mLevels;
  60. //~ percentage of trunk at bottom without branches 
  61. F32 mBaseSize;
  62. //~ the general scale + variance of tree
  63. F32 mScale, mScaleV;
  64. // general scale of tree
  65. F32 mScale0, mScaleV0;
  66. // LOBING
  67. //*! number of peaks in the radial distance about the perimeter
  68. U8 mLobes;
  69. // even numbers = obvius symmetry ... use odd numbers
  70. //*! magnitude of the variations as a fraction of the radius
  71. F32 mLobeDepth;
  72. // FLARE
  73. //*! causes exponential expansion near base of trunk
  74. F32 mFlare;
  75. // scales radius base by min 1 to '1 + flare'
  76. //*! percentage of the height of the trunk to flair -- likely less than baseSize
  77. F32 mFlarePercentage;
  78. //*! number of cross sections to make for the flair
  79. U8 mFlareRes;
  80. // LEAVES
  81. //~ number of leaves to make
  82. U8 mLeaves;
  83. //! scale of the leaves
  84. F32 mLeafScaleX, mLeafScaleY;
  85. // quality/density of leaves
  86. F32 mLeafQuality;
  87. // several params don't have level 0 values
  88. // BRANCHES 
  89. //~ angle away from parent
  90. F32 mDownAngle[MAX_NUM_LEVELS - 1];
  91. F32 mDownAngleV[MAX_NUM_LEVELS - 1];
  92. //~ rotation around parent
  93. F32 mRotate[MAX_NUM_LEVELS - 1];
  94. F32 mRotateV[MAX_NUM_LEVELS - 1];
  95. //~ num branches to spawn
  96. U8 mBranches[MAX_NUM_LEVELS - 1];
  97. //~ fractional length of branch. 1 = same length as parent branch
  98. F32 mLength[MAX_NUM_LEVELS];
  99. F32 mLengthV[MAX_NUM_LEVELS];
  100. //!~ ratio and ratiopower determine radius/length
  101. F32 mRatio, mRatioPower;
  102. //*! taper of branches
  103. F32 mTaper[MAX_NUM_LEVELS];
  104. // 0 - non-tapering cylinder
  105. // 1 - taper to a point
  106. // 2 - taper to a spherical end
  107. // 3 - periodic tapering (concatenated spheres)
  108. //! SEG SPLITTING
  109. U8 mBaseSplits; //! num segsplits at first curve cross section of trunk
  110. F32 mSegSplits[MAX_NUM_LEVELS]; //~ splits per cross section. 1 = 1 split per section
  111. F32 mSplitAngle[MAX_NUM_LEVELS]; //~ angle that splits go from parent (tempered by height)
  112. F32 mSplitAngleV[MAX_NUM_LEVELS]; //~ variance of the splits
  113. // CURVE
  114. F32 mCurve[MAX_NUM_LEVELS]; //* general, 1-axis, overall curve of branch
  115. F32 mCurveV[MAX_NUM_LEVELS]; //* curve variance at each cross section from general overall curve
  116. U8 mCurveRes[MAX_NUM_LEVELS]; //* number of cross sections for curve
  117. F32 mCurveBack[MAX_NUM_LEVELS]; //* curveback is amount branch curves back towards 
  118. //  vertices per cross section
  119. U8 mVertices[MAX_NUM_LEVELS];
  120. // * no longer useful with pre-instanced branches
  121. // specifies upward tendency of branches. 
  122. //F32 mAttractionUp;
  123. // 1 = each branch will slightly go upwards by the end of the branch
  124. //  >1 = branches tend to go upwards earlier in their length
  125. // pruning not implemented
  126. // Prune parameters
  127. //F32 mPruneRatio;
  128. //F32 mPruneWidth, mPruneWidthPeak;
  129. //F32 mPrunePowerLow, mPrunePowerHigh;
  130. // NETWORK MESSAGE DATA
  131. // Below is the outline for network messages regarding trees.  
  132. // The general idea is that a user would pick a general 'tree type' (the first variable)
  133. // and then several 'open ended' variables like 'branchiness' and 'leafiness'. 
  134. // The effect that each of these general user variables would then affect the actual
  135. // tree parameters (like # branches, # segsplits) in different ways depending on
  136. // the tree type selected.  Essentially, each tree type should have a formula
  137. // that expands the 'leafiness' and 'branchiness' user variables into actual
  138. // values for the tree parameters.  
  139. // These formulas aren't made yet and will certainly require some tuning.  The
  140. // estimates below for the # bits required seems like a good guesstimate.
  141. // VARIABLE - # bits (range) - VARIABLES AFFECTED
  142. // tree type - 5 bits (32) -
  143. // branches - 6 bits (64) - numBranches
  144. // splits - 6 bits (64) - segsplits
  145. // leafiness - 3 bits (8) - numLeaves
  146. // branch spread - 5 bits (32) - splitAngle(V), rotate(V)
  147. // angle - 5 bits (32) - downAngle(V)
  148. // branch length - 6 bits (64) - branchlength(V)
  149. // randomness - 7 bits (128) - percentage for randomness of the (V)'s
  150. // basesize - 5 bits (32) - basesize
  151. // total - 48 bits
  152. //U8 mNetSpecies;
  153. };
  154. #endif