开拓思维,如何用编程思想进行三维建模(2)

接着开拓思维,如何用编程思想进行三维建模(1)

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")

 

好了到现在差不多可以实现建筑物的生成了,虽然不怎么好看!!!!我们最后再看一下建筑物的结构图

 

看一下它基于规则批量生成模型,选择一些地块拖入规格,如下

 

好了我要说的就是这些,不得不佩服外国人的想法,这么容易就可以建模,而且可以导出在浏览器上查看,最后分享我做的几个建筑和我参加他们公司举办的大学生竞赛视频(初学只得一个优胜奖),有兴趣的可以交流一下,

 

 

视频路径:http://v.youku.com/v_show/id_XMTQwMjAzMDEyMA==.html

posted @ 2016-04-09 16:48  ATtuing  阅读(1044)  评论(0编辑  收藏  举报