cityengine规则建模实例

以下是cityengine建模实例代码
必要的文字性说明都在代码注释中标明了

/**
 * File:    myrule3.cga
 * Created: 20 Feb 2021 08:45:29 GMT
 * Author:  86159
 */

version "2019.0"
//以上是新建规则rule文件自带的代码

const groundwall_tex="assets/groundwall.png"
const wall_tex="assets/wall.png"
const door_tex="assets/door.png"
const window_tex="assets/window.png"

//定义纹理图片为常量,“”部分是图片文件路径

attr height=24
Lot-->
   extrude(height)  Building
   
Building-->
   comp(f) { front : Frontfacade |
             side  : Sidefacade  |
             top   : Topfacade    }
//组件分离函数分离各个面并命名
   attr groundfloor_height=5.5
   attr floor_height=4.5
   attr tile_width=4

Frontfacade-->
   split(y) { groundfloor_height : Groundfloor|
              {~floor_height     : UPEfloor}*  }       
//纵向切割,一楼底层,其他上层楼重复切割得出
              
UPEfloor-->
   split(x){  1           : Wall|
            {~tile_width  : Tile}*|
              1          : Wall    }
//横向切割出墙面和房间格
              
Groundfloor-->
   split(x){{~tile_width  :  GroundTile}*|
             5            :  EntranceTile|          
            {~tile_width  :  GroundTile}* } 
//横向切割出一楼墙面和房间格   

Tile-->
   split(x){~1 :  Wall                                         |
            2  :  split(y){ 1 : Wall| 1.5 : Window| ~1 : Wall} |
            ~1 :  Wall                                          }
//对房间格进行纵向切割,分出窗户以及窗户上下的墙面   

GroundTile-->
   split(x){ ~1 : GroundWall|
             2  : split(y){ 1 : GroundWall | 1.5 : Window | ~1 : GroungWall}* |
             ~1 : GroundWall                                                   }
//对一楼房间格进行纵向切割,分出窗户以及窗户上下的墙面 

Sidefacade-->
   split(y){ groundfloor_height : Sidefloor|
             {~floor_height     : Floor}*   }
//对侧墙分割出一楼大厅的部分,其余为整面侧墙,不进行楼层分割

Sidefloor-->
   split(x){ 1             :  GroundWall   |
             {~tile_width  :  GroundTile}* |
             1             :  GroundWall    }
//对一楼大厅侧面进行横向切割,分出墙和房间格
//再根据之前对GroundTile的定义可以直接得出带窗户的房间



//以下是对各个部件进行贴图的操作
//其中门窗会涉及到伸缩,使用平移函数t(tx,ty,tz)即可
GroundWall-->
   setupProjection(0,scope.xy,scope.sx,scope.sy)
   texture(groundwall_tex)
   projectUV(0)


Wall-->
   setupProjection(0,scope.xy,scope.sx,scope.sy)
   texture(wall_tex)
   projectUV(0)

Window-->
   t(0,0,-0.25)
   setupProjection(0,scope.xy,scope.sx,scope.sy)
   texture(window_tex)
   projectUV(0)

 EntranceTile-->
    t(0,0,-0.25)
   setupProjection(0,scope.xy,scope.sx,scope.sy)
   texture(door_tex)
   projectUV(0)

Floor-->
   setupProjection(0,scope.xy,scope.sx,scope.sy)
   texture(wall_tex)
   projectUV(0)
   
Topfacade-->
   setupProjection(0,scope.xy,scope.sx,scope.sy)
   texture(wall_tex)
   projectUV(0)
/*
 setupProjection(0,scope.xy,scope.sx,scope.sy)
   texture(wall_tex)
   projectUV(0)
 这一段代码是纹理贴图核心规则代码
 */

此图是我找的纹理图片的存放位置路径纹理图片存放的位置路径

显然我的纹理图片都是我瞎找的,其实就是我在我的电脑壁纸上面抠的不同位置的图()咳咳,将就看吧。下次注意(bushi
建成效果

  • 10
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值