// Grass.inc Plugin - Creates a mesh object representing a patch of grass #declare XI = 0; #if (PatShape=1) #declare XStart = PatRad*-1; #declare XEnd = PatRad; #declare YStart = PatRad*-1; #declare YEnd = PatRad; #end #declare XSteps = (XEnd-XStart)/XStep; #declare YSteps = (YEnd-YStart)/YStep; #declare ZT0 = ZPos - MeanBladeWidth/4; // Just below the ground // Mesh object definition starts here mesh{ #while (XI < XSteps) #declare YI = 0; #while (YI < YSteps) #declare XOff = XStart + (XStep * (XI + ((rand(R1)*XStepRand*2)-XStepRand))); #declare YOff = YStart + (YStep * (YI + ((rand(R1)*YStepRand*2)-YStepRand))); #if (PatShape=1) #if (((XOff*XOff)+(YOff*YOff))>(sqrt(rand(R1))*PatRad*PatRad)) #declare NumBlades = 0; #declare FlowerFlag = 0; #else #declare NumBlades = MinBlades + ((MaxBlades-MinBlades)*rand(R1)); #declare FlowerFlag = 1; #end #else #declare NumBlades = MinBlades + ((MaxBlades-MinBlades)*rand(R1)); #declare FlowerFlag = 1; #end #declare BladeNum = 1; #while (BladeNum <= NumBlades) #declare BladeAngle = MinAngle + ((MaxAngle-MinAngle)*rand(R1)); #declare BladeHeight = MeanBladeHeight*(1+((rand(R1)-0.5)*HeightVar*2)); #declare BladeWidth = MeanBladeWidth*(1+((rand(R1)-0.5)*WidthVar*2)); #declare BladeBearing = rand(R1)*360; #declare BladeCurve = MinCurve + ((MaxCurve-MinCurve)*rand(R1)); #declare BladeSegs = MinBladeSegs + ((MaxBladeSegs-MinBladeSegs)*rand(R1)); #declare CurvePerSeg = BladeCurve/BladeSegs; #declare SegCurve = CurvePerSeg; #declare PT0 = ; #declare SegLen = BladeHeight * (pow(1.25,BladeSegs-1)/(pow(1.25,BladeSegs)-1)) *(1.25-1); #declare SegTaper = (SegLen/BladeHeight)/pow(1.25,BladeSegs); #declare SegWidth = BladeWidth * (1-SegTaper); #declare PT1 = PT0 + vrotate(,<0,0,BladeBearing>); #declare PT3 = PT0 + vrotate(<0,0,SegLen>,); #declare PT2 = PT3 + vrotate(,<0,0,BladeBearing>); #declare NT0 = vrotate(<0,-1,0>,); #declare NT1 = vrotate(<0,-1,0>,<(BladeAngle+SegCurve)/2,0,BladeBearing>); #declare BladeSeg = 0; #while (BladeSeg ) , ) ,<0,0,BladeBearing> ); #declare PT3 = PT0 + vrotate(vrotate(<0,0,SegLen>, ), ); #declare PT2 = PT3 + vrotate(,<0,0,BladeBearing>); #declare SegCurve = SegCurve + CurvePerSeg; #declare SegTaper = SegTaper * 1.25; #declare SegWidth = SegWidth - (BladeWidth * SegTaper); #declare BladeSeg = BladeSeg + 1; #declare NumTri = NumTri + 2; #end smooth_triangle{ PT0, NT0, PT1, NT0, (PT2+PT3)/2, NT1 texture{ Grass_Text} } #declare BladeNum = BladeNum + 1; #declare NumTri = NumTri + 1; #end #if (FlowerFlag=1) #if (rand(R1)