CityEngine小区模型制作初探

来源:互联网 发布:搜索阿里云免费开通码 编辑:程序博客网 时间:2024/04/30 07:08

 

 

在CE里要进行模型的制作很重要的一个方面是判断模型与面之间的对应关系,基于这个问题对前期的数据处理、贴图实现与面的判断做了初探。下面就这几个问题分别做下诠释。
1. 起点、方向在ArcGIS与CityEngine中的区别。
首先看一下在ArcGIS中Ploygon数据对点读取的方式:
 
                  顺时针方向(左上为起点)                                     逆时针方向(左上为起点)
从上图我们不难看出无论是采用顺时针方向还是逆时针方向,ArcGIS对数据点的记录并没有差别,也就是说在ArcGIS里面的记录只与起点有关与方向无关。那么这两个数据在读到CityEngine里会是怎么样的呢,下面有一段代码通过索引的方式来推测一下CityEngine对数据的读取是怎样的。
SideFacade-->
  case comp.index==0:NIL
  else:Building
 

SideFacade-->
  case comp.index==1:NIL
  else:Building
 
从上面的结果可以看出CityEngine里对面的读取是按逆时针读取的,由于ArcGIS里对数据的记录与方向无关决定了导入到CE的ARCGIS数据与我们在ArcGIS里制作时的方向是无关的(只与起点相关)。
2. 贴图的实现
Rooftexture-->
  setupProjection(0,scope.xy,4,4)
  texture("Roof_01.png")
  projectUV(0)
 
上面是对屋顶贴图的实现的规则文件及贴图后的效果,从效果做如下几点推测:
 在贴图的过程中,每个面会自动的赋予一个二维的轴向即X、Y;
 可以通过贴图的尺寸合理的控制其与实际的比例,也可以通过面实际的宽高(scope.sx\scope.sy)来控制其合理性。
3.根据国内的模型极具对称的特色,想谈一下中心面的获取的问题(奇数个面)。
首先对中心面个人做一个定义:简而言之就是在一组面中居于中心的面为中心面。中心面的获取可以方便的建立起贴图与模型位置之间的关系,对于模型贴图的实现有至关重要的作用。
以FrontFacades(7个面)为例来看一下起点对中心面获取产生的影响。
   
          起点为front面最左边的点                         起点为front面左靠上的点
Lot-->
  extrude(10)
  comp(f){front:FrontFacade}
FrontFacade-->
  case comp.index==comp.total-(comp.total-1)/2:NIL
  else:Building
通过以上代码看产生的不同效果:
 
                                         左起点
 
                                                 左上起点
从上面的例子中可以看出在面的读取过程起始点的选择对与CGA代码的编写是有一定的影响的。