开拓思维,如何用编程思想进行三维建模(2)
i.这时候已经有了初步的样式了吧,接下来我们做一些更炫的东西。窗户都一样,我们可不可以进行随机变换呢?这时FileRandom()函数出场
//声明随机文件 *相当于模糊匹配, winName=fileRandom("1409020150_15553.obj/sash_window_*.jpg") Window--> setupProjection(0,scope.xy, '1, '1) projectUV(0)//winName图片 texture(winName)
j.你现在可能会说,都是是贴图,能不能不要这么low,好吧我们可以加一些三维的窗户
Window--> setupProjection(0,scope.xy, '1, '1)//projectUV(0)texture(winName)//i()替换函数 用三维模型替换 i("1409020150_15553.obj/sash_window.obj")
k.建筑物只有方形吗?其实我们也以到入三维模型替换主体,改变建筑物的外观(比如柱形)
Building--> //i() 柱体替换Building i("1409020150_15553.obj/cyl.obj") comp(f) {top : Roof|side:Wall }
l.难道我们写的建筑只能是静态的吗?其实我们可以把上面写死的长度设成变量属性的,这样我们就可以随意改变啦!!!(把所有代码贴再一遍)
version "2014.0" //声明随机数限制Height高度 @Range(20,100) attr Hight=20 //楼层高 attr Floor_Height=3 /墙的宽度 attr Wallside=0.5 //窗户宽度 attr winSize=2 //开始规则 @StartRule lot--> extrude(Hight)Building Building--> i("1409020150_15553.obj/cyl.obj") comp(f) {top : Roof|side:Wall } Roof--> setupProjection(0,scope.xy, '1, '1) projectUV(0) texture("/ESRI.lib/assets/Roofs/Flat/flatRoof_10.jpg") Wall--> split(y){~Floor_Height:Floor}* color(1,0,0) Floor--> split(x){Wallside:wallside| {~winSize:Tile|Wallside:wallside}*} Tile--> split(y){Wallside:wallside| {~winSize:Window|Wallside:wallside}} winName=fileRandom("1409020150_15553.obj/sash_window_*.jpg") Window--> setupProjection(0,scope.xy, '1, '1) projectUV(0)texture(winName)//i("1409020150_15553.obj/sash_window.obj") wallside--> setupProjection(0,scope.xy, 1, 1) projectUV(0) texture("/ganzhou/assets/wall_textures/stone/wall_stone_4.jpg")
好了到现在差不多可以实现建筑物的生成了,虽然不怎么好看!!!!我们最后再看一下建筑物的结构图
看一下它基于规则批量生成模型,选择一些地块拖入规格,如下
好了我要说的就是这些,不得不佩服外国人的想法,这么容易就可以建模,而且可以导出在浏览器上查看,最后分享我做的几个建筑和我参加他们公司举办的大学生竞赛视频(初学只得一个优胜奖),有兴趣的可以交流一下,