Cityengine教程建筑物贴纹理

2020-02-22 14:31

[Cityengine教程] CityEngine建模示例教程6:Basic Shape Grammar之Part 2:简单建筑物贴纹理(有图)

本节内容开始对之前构建的建筑贴上纹理。使用的规则是在上一节的基础上进行修改。作者也是在学习中,内容中如有不对的地方,欢迎大家指正。

1. 开始贴纹理之前,先在规则的最前面对要使用的纹理进行定义。 // textures

frontdoor_tex = \wall_tex = \dirt_tex = \roof_tex = \

由于要使用的窗户的纹理有9种不同的纹理,这些纹理存放在assets/fa?ade文件夹中。在使用的时候,我们这里定义随机获取其中一个窗户纹理,这样窗户的纹理就是随机的了。

randomWindowTexture

fileRandom(\2. 为建筑物的正面和侧面定义纹理 Frontfacade -->

setupProjection(0, scope.xy 1.5, 1, 1)

=

setupProjection(2, scope.xy, scope.sx, scope.sy)

split(y){ groundfloor_height : Groundfloor | { ~floor_height: Floor }* } Sidefacade -->

setupProjection(0, scope.xy, 1.5, 1, 1)

setupProjection(2, scope.xy, scope.sx, scope.sy) split(y){ groundfloor_height: Floor | { ~floor_height: Floor }* }

添加红色部分的代码,setupProjection()定义面在scope的xy平面使用color和dirt图片(由通道0和通道2代表)。在使用color map时,纹理图片将以1.5m×1m进行重复贴模。而使用dirt map时,将会在scope的x、y方向平铺。 其中setupProjection()命令有以下几种:

setupProjection(uvSet, axesSelector, texWidth, texHeight) setupProjection(uvSet, axesSelector, texWidth, texHeight, widthOrigin, heightOrigin)

setupProjection(uvSet, axesSelector, texWidth, texHeight, widthOrigin, heightOrigin, uwFactor) (1)uvset代表的是不同的纹理图层: uv-set Texture Layer 0 colormap 1 bumpmap

2 dirtmap 3 specularmap 4 opacitymap 5 normalmap

(2)axesSelector定义哪个轴分别代表u和v轴,可选的参数有:

scope.xy, scope.xz, scope.yx, scope.yz, scope.zx, scope.zy 以scope的轴定义

world.xy, world.xz, world.yx, world.yz, world.zx, world.zy 以world的轴定义

(3)texWidth和texHeight分别代表纹理的宽度和长度。如果值小于0,则认为可以对纹理做镜像显示,~符号表示值大小可以浮动,‘符号表示相对值。

(4)widthOrigin和heightOrigin分别代表距离u方向和v方向的偏移

(5)uwFactor设置w轴值相对于u轴的系数,默认为0 3. 添加Roof规则 Roof -->

setupProjection(0, scope.xy, scope.sx, scope.sy) texture(roof_tex) projectUV(0)

其中projectUV()命令含义如下:

命令:projectUV(uvSet) 指定纹理应用于哪个uvset。 4. 为窗户和门指定纹理: Window --> s('1,'1,0.4) t(0,0,-0.25)

texture(randomWindowTexture) i(window_asset) Door --> s('1,'1,0.1) t(0,0,-0.5)

texture(frontdoor_tex) i(\

5. 定义Wall和SolidWall的纹理 Wall --> color(wallColor) texture(wall_tex)

set(material.dirtmap, dirt_tex) projectUV(0) projectUV(2) SolidWall --> color(wallColor) s('1,'1,0.4)

t(0,0,-0.4) texture(wall_tex)

set(material.dirtmap, dirt_tex) i(\ projectUV(0) projectUV(2)

为Wall和SolidWall定义使用的纹理,使用set()命令定义在material.dirtmap属性,使用dirt_tex纹理。然后定义了将纹理贴在color和dirt通道。 set(attribute, bool value) set(attribute, float value) set(attribute, string value)

set命令将一个值指定给当前shape的一个属性。属性分为两类,一种是builtin属性,就是内置属性,例如material的属性。另一种是在规则文件中生命的属性。 最终结果如


Cityengine教程建筑物贴纹理.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:浅谈微课在中职语文教学中的有效运用-最新教育资料

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: