开拓思维,如何用编程思想进行三维建模(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)中;

 

posted @ 2016-04-09 15:44  ATtuing  阅读(2345)  评论(0编辑  收藏  举报