/** * @file lltreeparams.cpp * @brief implementation of the LLTreeParams class. * * $LicenseInfo:firstyear=2001&license=viewergpl$ * * Copyright (c) 2001-2009, Linden Research, Inc. * * Second Life Viewer Source Code * The source code in this file ("Source Code") is provided by Linden Lab * to you under the terms of the GNU General Public License, version 2.0 * ("GPL"), unless you have obtained a separate licensing agreement * ("Other License"), formally executed by you and Linden Lab. Terms of * the GPL can be found in doc/GPL-license.txt in this distribution, or * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 * * There are special exceptions to the terms and conditions of the GPL as * it is applied to this Source Code. View the full text of the exception * in the file doc/FLOSS-exception.txt in this software distribution, or * online at * http://secondlifegrid.net/programs/open_source/licensing/flossexception * * By copying, modifying or distributing this software, you acknowledge * that you have read and understood your obligations described above, * and agree to abide by those obligations. * * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, * COMPLETENESS OR PERFORMANCE. * $/LicenseInfo$ */ ////////////////////////////////////////////////////////////////////// #include "linden_common.h" #include "llmath.h" #include "lltreeparams.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// LLTreeParams::LLTreeParams() { // llinfos << "TREE PARAMS INITIALIZED" << llendl; // init to basic something or other... mShape = SR_TEND_FLAME; mLevels = 1; mScale = 15; mScaleV = 0; mBaseSize = 0.3f; mRatio = 0.015f; mRatioPower = 1.3f; mLobes = 0; mLobeDepth = .1f; mFlare = 1.2f; mFlarePercentage = 0.1f; mFlareRes = 3; //mAttractionUp = .5f; mBaseSplits = 0; mScale0 = 2.0; mScaleV0 = 0.0; // level 0 // scaling mLength[0] = 1.0f; mLengthV[0] = 0; mTaper[0] = 1.0f; // stem splits mSegSplits[0] = 0.15f; mSplitAngle[0] = 15.0f; mSplitAngleV[0] = 10.0f; mVertices[0] = 5; // curvature mCurveRes[0] = 4; mCurve[0] = 0; mCurveV[0] = 25; mCurveBack[0] = 0; // level 1 // scaling mLength[1] = .3f; mLengthV[1] = 0.05f; mTaper[1] = 1.0f; // angle params mDownAngle[0] = 60.0f; mDownAngleV[0] = 20.0f; mRotate[0] = 140.0f; mRotateV[0] = 0.0f; mBranches[0] = 35; mVertices[1] = 3; // stem splits mSplitAngle[1] = 0.0f; mSplitAngleV[1] = 0.0f; mSegSplits[1] = 0.0f; // curvature mCurveRes[1] = 4; mCurve[1] = 0; mCurveV[1] = 0; mCurveBack[1] = 40; // level 2 mLength[2] = .6f; mLengthV[2] = .1f; mTaper[2] = 1; mDownAngle[1] = 30; mDownAngleV[1] = 10; mRotate[1] = 140; mRotateV[1] = 0; mBranches[1] = 20; mVertices[2] = 3; mSplitAngle[2] = 0; mSplitAngleV[2] = 0; mSegSplits[2] = 0; mCurveRes[2] = 3; mCurve[2] = 10; mCurveV[2] = 150; mCurveBack[2] = 0; // level 3 mLength[3] = .4f; mLengthV[3] = 0; mTaper[3] = 1; mDownAngle[2] = 45; mDownAngleV[2] = 10; mRotate[2] = 140; mRotateV[2] = 0; mBranches[2] = 5; mVertices[3] = 3; mSplitAngle[3] = 0; mSplitAngleV[3] = 0; mSegSplits[3] = 0; mCurveRes[3] = 2; mCurve[3] = 0; mCurveV[3] = 0; mCurveBack[3] = 0; mLeaves = 0; mLeafScaleX = 1.0f; mLeafScaleY = 1.0f; mLeafQuality = 1.25; } LLTreeParams::~LLTreeParams() { } F32 LLTreeParams::ShapeRatio(EShapeRatio shape, F32 ratio) { switch (shape) { case (SR_CONICAL): return (.2f + .8f * ratio); case (SR_SPHERICAL): return (.2f + .8f * sinf(F_PI*ratio)); case (SR_HEMISPHERICAL): return (.2f + .8f * sinf(.5*F_PI*ratio)); case (SR_CYLINDRICAL): return (1); case (SR_TAPERED_CYLINDRICAL): return (.5f + .5f * ratio); case (SR_FLAME): if (ratio <= .7f) { return ratio/.7f; } else { return ((1 - ratio)/.3f); } case (SR_INVERSE_CONICAL): return (1 - .8f * ratio); case (SR_TEND_FLAME): if (ratio <= .7) { return (.5f + .5f*(ratio/.7f)); } else { return (.5f + .5f * (1 - ratio)/.3f); } case (SR_ENVELOPE): return 1; default: return 1; } }