2009年5月23日星期六

city engine lite最新进展

上一篇日志里提到了语法解释器已经完成,cga语句已经可以解释成cga命令。
现在主要的任务是将cga命令翻译成maya命令。
目前已经遇到的困难:
1、Comp命令如何实现?
在CGA中,shape是scope的一个属性,在maya里shape节点是Transform节点的子节点,很相似。不同的是,对scope执行Comp可以产生低维度的scope,低维度的shape也在这一过程中产生。maya的shape,这里说多边形物体,分解之后,产生单一的多边形面,也仍然是3D的。我在实现中使用的是旋转标准平面使之符合物体面的方法,这样只用物体坐标系的X和Y就可以表示2D面。另一种方法,不旋转面,在可以预见的后续操作中,会很麻烦,分割scope的时候就必须考虑法线、支点、基准边的问题。现在这些问题就要在Comp命令里考虑。

2、贴图坐标如何处理?
这也是个麻烦的东西,现在还没有什么头绪。应该是随scope大小和位置的变化的。

3、Roof,Occ,Snap
Roof要等Comp完成后才有点眉目。Occ和Snap现在也没有什么头绪,求交点和交线看来是少不了了。

看看目前的完成的部分:
这是3条CGA规则:

1:default~S(9,10,2) Subdiv(Y,4,4,2){wall|window|Subdiv(X,r(1),r(1),r(1)){tile|tile|tile}}:1
2:window~T(0,0,2) newwin
3:newwin~Subdiv(X,r(1),r(1)){lwin|rwin}


CGAgrammar解释后产生的图形,简单了点,下一次试试更复杂的规则:

没有评论: