【CityEngine】如何在街道两侧放置路灯、行树等?

使用CGA代码将对象(路灯、树木等)放置到路边。这里用到的主要方法就是Split 函数去做分割。

思路是,现将shape按照较短的轴向进行最初的分割剥离,得到路的两边sidewalk,然后将这些分割出来的形状进行再次分割,也就是沿着长的轴的方向分割成多个重复的小的形状,最后,用实际的模型(如路灯或树等)替换这些小块。


下面是示例代码,参考下:


Sidewalk -->
    SidewalkGeometry.
    SidewalkObjects     # 复制shape!

# 思路:沿着道路的方向纵向切割道路,得到两边的人行道。
# 在剩下的shape“dot”中,插入树木、路灯等静态模型对象。
    
attr placementWidth = 0.05

attr streetDist = 0.2
attr objectDist = 5

attr objectSize = 0.1
attr objectHeigt = 2

SidewalkObjects -->
    # 沿道路纵向分割两边的人行道。
    split(v,unitSpace,0) { streetDist : NIL | placementWidth : PlacementStrip | ~1 : NIL  }
    
    
PlacementStrip -->
    # 沿着人行道分割横向切割,切成小段。
    split(u,unitSpace,0) {objectDist: NIL | placementWidth : PlacementPoint }*

PlacementPoint -->
    alignScopeToGeometry(yUp, 0) # align the shape to the current point shape, thus the street direction!
    # r(0,90,0) # 旋转90度,视情况使用,例如路灯模型。
    s(objectSize*2, objectHeigt, objectSize)
    i("builtin:cube")
    center(xz)



效果示例:


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值