extrude(rand(15,50) (random是随机生成的意思,rand(15,50)是系统随机生成15米到50米高的楼房 )
comp(f){front:Front|side:Side|top:Top} Front-->
//color(0.8,0.1,0.2)
split(y){4:F1|{~3:F2}*|~3:F3} F3-->
split(x){{~3:window}*} F1-->
split(x){{~3:window}*|3:door|{~3:window}*} door--> color(0,1,0)
window-->
split(y){~1:wall|~2:windows|~1:wall} windows-->
split(x){~0.5:wall|~2:windw1|~0.5:wall} windw1-->
//texture(fileRandom(\color(0,1,1) wall--> color(1,0,0) extrude(0.15) F2-->
split(x){{~3:window}*} Side-->
//color(0,0,1)
split(y){4:F|{~3:F2}*} F-->
split(x){{~3:window}*} Top-->
color(0.1,0.5,0) offset(0.15) w w-->
comp(f) { inside: I| border: O1 } O1-->
extrude(-1) color(1,0,0)
随机生成贴图的房子(不完美) Lot-->
extrude(rand(12,30))
comp(f){front:Front|side:Side|top:Top} Front-->
split(y){4:firstF|{~3:secondF}*} firstF-->
split(x){{~3:window}*|3:door|{~3:window}*} window--> offset(-0.8) A A-->
comp(f) { inside: I | border: O } I-->
setupProjection(0, scope.xy, scope.sx, scope.sy) projectUV(0)
texture(fileRandom(\ //color(0,1,1) O-->
//setupProjection(0, scope.xy, scope.sx, scope.sy) projectUV(0)
texture(fileRandom(\ //color(1,1,0) extrude(0.3)
//secondF--> //extrude(0.3) door-->
setupProjection(0, scope.xy, scope.sx, scope.sy) projectUV(0)
texture(fileRandom(\
//color(1,0,0.5) Top-->
offset(0.3) w w-->
comp(f) { inside: I1| border: O1 } I1-->
color(1,1,0) O1-->
projectUV(0)
texture(fileRandom(\ //color(1,1,0) extrude(-1) //color(1,1,0) secondF-->
split(x){{~3:window}*} Side-->
split(y){4:firstF1|{~3:secondF}*} firstF1-->
split(x){{~3:window}*}
精细模型:
解决了:
(1)窗户怎么凹陷?
(2)每一层的距离和房间距离怎么等分? (3)房顶怎么生成? (4)怎么随机贴图?
(5)随机函数在楼高中的应用?
(6)前边有大门,而side没有门时怎么生成/ (7)随机生成贴图时,怎么保证四周贴图一置? (8)怎么是生成的贴图无缝连接?
Lot--> extrude(47)
comp(f){side : Facade top : X }
Facade-->
split(y) { { ~1 : X |~8 : Floor }* |~1 : X }
{沿Y方向上分割一米的低沿儿加上八米的楼层高循环;最后再加上一米的上沿儿如图} Floor-->
split(x) { { ~1 : X |~5 : Window }* |~1 : X } {沿X方向上1米和5米循环分割最后再加上1米的边儿} 经过XY两个方向上的分割生成图(a) Window--> i(\
{最后加上贴图生成如图(b)}
Y
X (a) (b)
Lot-->
extrude(20) split(x) {
2 : color(\2 : set(material.color.r, 1.0) set(material.color.g, 0) set(material.color.b, 0) X }
Lot--> lot1 lot2
lot1-->color(1,0,0) 注:底面颜色红 lot2-->
rotateScope(0,30,0) 注:Scope发生了旋转 color(0,1,0) 注:拉伸颜色绿 innerRect extrude(5)
在viewport 上画一个面即可