CityEngine中的模型轴概念

3 模型轴
除了Shape轴以外,三维模型也是有自己的轴,我们可以在预览图中看到模型的轴,如下图:
 
由上图我们也可以看出模型轴与主轴的YZ坐标是相反的。另外,这个模型轴是可以根据参考轴的不同而旋转。如下图:
 
图中是分别显示了Shape轴和模型轴的效果,我们可以看出,当我们把模型通过i(geometryPath)方法插入到Shape后,CityEngine会自动以Shape轴为参考,将模型轴旋转到与Shape轴一样,然后以Shape范围为参考对模型进行缩放,以确保模型范围与Shape范围一致。由于Shape的Y坐标是0值,所以模型在缩放的时候其Y坐标将无法按照Shape范围来拉伸。CityEngine会自动将模型在Y坐标方向上拉伸,在CityEngine的帮助文档中提到了这个拉伸公式,拉伸值的公式如下:
 
4 更改参考轴
在上一节我们提到了模型的轴可以根据参考轴旋转,那如何设置参考轴呢?在CGA文件中,当我们使用i(geometryPath)方法插入模型的时候,模型会将它自身的轴旋转匹配到Shape轴。这样就会出现上一节的图中的效果,模型的朝向被改变了。
在CGA的函数库中,有一个alignScopeToAxes()函数,这个函数的可以在保证模型不被旋转的情况下,改变参考轴,从而改变模型的范围。如下例子:
 
以上代码,我先把alignScopeToAxes()注释了,其意思就是将84.dae模型插入到Shape上,并以Shape轴为参考对模型进行缩放旋转,效果如下图:
 
在上两个图中可以看出模型被旋转,导致模型的朝向与Shape没能匹配。下面,我们修改CGA文件的代码,将alignScopeToAxes()的注释去掉,我们在看看效果:
  
从上两个图我们可以看出模型已经没有以Shape轴为参考旋转了,而是以主轴为参考进行旋转,由于模型在其建立的时候已经是按照主轴的坐标构建的,所以其朝向是自然与Shape的朝向匹配的。另外,虽然模型并没有以Shape轴为参考旋转,但是我们可以看到的是模型依然以Shape范围为参考所放了。
通过上面的例子,我们可以总结,CityEngine在加载模型时是以参考轴为准旋转模型,以Shape范围为参考缩放模型,通过双参考机制来控制模型的大小和朝向。
参考轴的变化还可以通过使用setPivot(axisMapSelector, cornerIndex)方式,首先我们需要了解setPivot的两个参数的定义:
axisMapSelector:表示新轴的定义。源轴是xyz,如果新轴定义为xyz的话表示轴没有变化;当新轴定义为zxy,表示源轴的x坐标转换为新轴的z坐标,源轴y坐标转换为x坐标,源轴的z坐标转换为y坐标。
cornerIndex:是一个0到7的整数范围值,其意义是表示Shape范围的8个点,如下图:
 
如上图所示,如果Shape范围是一个立方体的话,CityEngine会以Shape范围的节点为起点,以顺时针方向为各终点编号。这些节点就是转换参考轴时的参考原点。在这8个节点,上,它们都具有不同的轴,如下图:
 

有上面三个图片我们可以看出节点的轴是由原点的轴决定的,先将原轴转换为新轴,在重新定义各节点的轴。

展开阅读全文

没有更多推荐了,返回首页