开拓思维,如何用编程思想进行三维建模(1)
前言:大家一想到三维建模首先可能会想到的是AutoCAD,3DMax之类的建模软件。对于一些没有设计感的程序猿来说,做一个有设计感的三维建筑可能并不是那么简单,但是说要是可以通过编程实现三维建模,你是不是很有兴趣尝试一下呢?下面我来带大家走入可编程的三维世界吧。
1.这次我要讲的这款软件叫CityEngine,如果对CityEngine了解的大神可以飘过,CityEngine最初是由瑞士苏黎世理工学院,帕斯卡尔·米勒(Pascal Mueller)(米勒是Procedural公司创始人之一,后来成为Procedural公司CEO)设计研发。当米勒在计算机视觉实验室博士研究期间,发明了一种突破性的程序建模技术,这种技术主要用于三维建筑设计.2011年7月,Esri公司总裁Jack Dangermond先生在圣地亚哥的Esri国际用户大会上向数万名与会者宣布收购瑞士Procedural公司,产品正式更名为Esri CityEngine;
2.如果我们来建立三维建筑,我们会怎么办呢?是不是无从下手?没关系,我们看一下人家是如何解决的,并从中吸收灵感,用于自己的编码过程中。
3.下面开始我们的讲解:
a.先找一块空地
b.新建一个规则,将选中的地块拉伸30米,将生成的矩形命名为Building,规则如下(注“//”为注释内容)
//lot就是指当前作用的地块 -->表示这个模型即将被替代了
lot-->
//拉伸函数 extrude(拉伸高度) extrude(30)Building
c.将Building进行分解,分为屋顶Roof,四周分为墙Wall,来替换Building(为了演示方便我给他们添加颜色)
Building--> //comp(){} 组件分割函数 top side 是函数关键词 comp(f) {top : Roof|side:Wall } Roof--> //屋顶添加红颜色 color(1,0,0) Wall--> //墙为绿色 color(0,1,0)
d.然后对墙进行y轴分割,分为一层次层的Floor
Wall--> //split()分割函数 大约平均3.1将墙沿着y轴循环分割生成Floor split(y){~3.1:Floor}* //上面的绿色消失说明这是Wall一倍取代 color(1,0,0)
e.对每层层的Floor进行x轴分割生成Tile(用于生成窗户),wallside(墙面)
Floor--> //沿着x轴进行分割生成墙|窗户|墙的循环 split(x){0.5:wallside| {~2:Tile|0.5:wallside}*}
f.在Tile的中心生成窗户Window,上下两边还为墙wallside
Tile--> //split 沿着y轴分割生成上下为墙wallside中间接Window窗 split(y){0.5:wallside| {~2:Window|0.5:wallside}}
g.建筑物的大体形状已经出来啦,我们开始美化先给屋顶进行贴图
Roof--> //setupProjection()一比一贴图函数 setupProjection(0,scope.xy, '1, '1) projectUV(0) //图片地址 texture("/ESRI.lib/assets/Roofs/Flat/flatRoof_10.jpg")
h.我们对墙和窗户进行贴图。
Window--> setupProjection(0,scope.xy, '1, '1) projectUV(0)texture ("1409020150_15553.obj/sash_window_7.jpg") wallside--> setupProjection(0,scope.xy, 1, 1) projectUV(0) texture("/ganzhou/assets/wall_textures/stone/wall_stone_4.jpg")
到现在为止已经基本建好了,由于内容长度限制,后续内容我放入开拓思维,如何用编程思想进行三维建模(2)中;