MAXScript101_5.6 TreePlanter – Scene Generation using Mesh Sampling

MAXScript101_5.6 TreePlanter – Scene Generation using Mesh Sampling

 

MAXScript101_5.6 TreePlanter – Scene Generation using Mesh Sampling_第1张图片

实例:

 

-- 脚本使用前提:创建曲面作为大地,命名为ground; 创建一条曲线作为道路,名为为road; -- 创建一棵树,后面的实例对象,命名为masterTree -- 脚本功能:沿着道路,随机生成树,树的棵树可以自定义 -- place trees on a surface randomly along a curve numTrees = 500 for i in 1 to numTrees do ( -- step1: 随机生成沿着道路的位置 -- get random pos along the curve & tangent there local u = random 0.0 1.0, pos = lengthInterp $road 1 u, tan = lengthTangent $road 1 u -- step2: 设计树沿道路两旁栽种 -- generate perpendicular ray at random offset local offset = random 5 18 * (if i < numTrees / 2 then 1 else -1), -- 计算偏移向量 offsetVec = cross tan z_axis * offset, -- 计算曲线上的点按偏移向量走的位置 offsetPos = pos + offsetVec, treeRay = ray [offsetPos.x, offsetPos.y, 1000] [0, 0, -1] -- step3: 将树种在大地曲面上 -- intersect ray with ground surface to get tree pos, gen random -- 求与大地的交点 local treePos = (intersectRay $ground treeRay).pos, treeScale = [1, 1, 1] * random 0.2 1.1 -- instance master tree at that pos & scale instance $masterTree pos:treePos scale: treeScale name:"tree" -- update screen every 10 trees if mod i 10 == 0 then redrawViews() ) 

备注:

1. 有关射线(ray)

-- 一个点,一个方向确定一条射线

treeRay = ray [10,10,1000] [0, 0, -1] -- (ray [10,10,1000] [0,0,-1])

-- intersectRay 返回新的射线,它的点为参数中的射线与参数中的曲面的交点,方向为该曲面在该交点的法向

p = intersectRay $ground treeRay -- (ray [10,10,0] [0,0,1])

p.pos -- [10,10,0]

p.dir -- [0,0,1]

 

这里$ground是z = 0的 plane.

 

你可能感兴趣的:(脚本,tree,Random,generation)