以下是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
转载:https://blog.csdn.net/qq_53411079/article/details/114155845
查看评论