CityEngine基于规则贴图的实现技巧
转自:http://blog.sina.com.cn/s/blog_841eeb5201010p3e.html
CityEngine在贴图的实现过程有两种方式:第一种是通过i(geometryPath)规则引入外部带贴图的模型;第二种方式是通过texture(string texturePath)规则在CityEngine内部通过规则控制来完成贴图的实现。下面通过具体的例子谈一下这两种方式在实际中的应用。
引入外部带贴图的模型
适用方向:模型被重复利用、结构较为复杂。
下面以盖板为例来说一下引入外部带贴图模型的方法。
一、 模型导出时的注意事项
在用3DMax软件把其它格式的模型导出为CityEngine支持的部件格式(如obj)时,要选择带有贴图纹理和贴图坐标。
默认情况下,OBJ导出选项窗口的面选项为四边形,为了减少面数据根据需要可以选择多边形;材质导出的窗口中转换位图是被选中的,此种情况下贴图的的尺寸会发生变化。下图为max模型效果与导出obj之后在max里的显示效果:
二、 引用规则的代码与效果
Street-->
split(u,unitSpace,0){~3.6:Str_Tex | 0.2:color("#ff0000") X}*
Str_Tex-->
i("obj/gaiban.obj")
从上面两个图可以看出不用任何贴图的代码就可以完成模型的贴图。
通过内部规则控制实现纹理贴图
通过内部规则控制实现纹理贴图,主要是指采用texture的方式进行贴图。在使用texture进行贴图的过程中其最关键的在于约束texture引入的图片所代表的实际大小和其摆放的位置等信息,因而就产生了控制图片代表实际尺寸、图片重复的次数两种方式的贴图。下面就针对这两种方式进行简单的介绍。
控制图片代表的实际尺寸
适用范围:主要指建筑物、护栏等的贴图。
引用的规则代码:
Lot-->
extrude(10)
comp(f){front:ftFacade | all:X}
ftFacade-->
setupProjection(0,scope.xy,scope.sx/rint(scope.sx/2.5),scope.sy/rint(scope.sy/1.5))
texture("WINDOW_02.jpg")
projectUV(0)
与贴图相关的规则介绍:
setupProjection(uvSet,axeSelector,texWidth,texHeight)
该规则主要是对texture所引入的图片进行了约束,其中uvSet的取值范围[0,5],分别代表不同的Texture Layer,一般选0值;axesSelector确定了贴图时图片的U向和V向,texWidth和texHeight分别代表图片的尺寸所对应的实际的宽度和高度。
texture(string texturePath)
该规则引入相应的贴图。
projectUV(uvSet)
该规则通过应用相应的投影矩阵创建最终的纹理坐标。与3D Max的塌陷功能有点类似。
引入该规则之后建筑贴图的效果。
控制图片的重复次数
适用范围:道路或与道路相关的具有走向的平面贴图。
引用的规则代码:
lenAlongU=geometry.du(0,unitSpace)
Sidewalk-->
NIL
Street-->
normalizeUV(0, uv, collectiveAllFaces)
scaleUV(0,rint(lenAlongU/20),1)
texture("street_1lanes_stripes.png")
与贴图相关规则的介绍:
normalizeUV(uvSet,uvNormalizeMode,uvNormalizeType)
该规则约束了贴图是沿走向方向上进行贴图的。uvNormalizeMode有三个值的选项:u、v和uv;之前做了一个简单的测试发现它们的区别不是很大,在道路上贴图时一般选择uv项;uvNormalizeType有两个值的选项:separatePerFace和collectiveAllFaces,之前采用第一个值时发现贴图时并不按走向进行贴的,一般选择第二个值。
scaleUV(float uvSet, float uFactor, float vFactor)
该规则约束了当前贴图时的重复次数,其中uFactor代表长度方向上的重复次数,vFactor代表宽度方向上重复次数。
附注:本文档提供的规则代码可以在实际中实用,通过调整某些参数的值我们将会更清晰的理解这些规则、更好的实用这些规则。由于水平有限,其中的内容有解释不清的地方敬请雅正。
CityEngine基于规则贴图的实现技巧的更多相关文章
- 编写高性能Web应用程序的10个技巧
这篇文章讨论了: ·一般ASP.NET性能的秘密 ·能提高ASP.NET表现的有用的技巧和窍门 ·在ASP.NET中使用数据库的建议 ·ASP.NET中的缓存和后台处理 使用ASP.NET编写一个We ...
- 编写高性能 Web 应用程序的 10 个技巧
使用 ASP.NET 编写 Web 应用程序的简单程度令人不敢相信.正因为如此简单,所以很多开发人员就不会花时间来设计其应用程序的结构,以获得更好的性能了.在本文中,我将讲述 10 个用于编写高性能 ...
- 转自微软内部资料:编写高性能 Web 应用程序的 10 个技巧
编写高性能 Web 应用程序的 10 个技巧 转自微软资料数据层性能技巧 1 — 返回多个结果集技巧 2 — 分页的数据访问技巧 3 — 连接池技巧 4 — ASP.NET 缓存 API技巧 5 — ...
- MATLAB 出一张好看的图
1.坐标轴的视点(viewpoint):从哪个方向看整个坐标系统,这决定了坐标轴的方向和位置,通过view函数实现视点的设置:view([z y ]):(将坐标系统想象为一座房子,而自己是个会飞的天使 ...
- 教你用Python创建瀑布图
介绍 对于绘制某些类型的数据来说,瀑布图是一种十分有用的工具.不足为奇的是,我们可以使用Pandas和matplotlib创建一个可重复的瀑布图. 在往下进行之前,我想先告诉大家我指代的是哪种类型的图 ...
- Android Studio 常用快捷键和使用技巧
Android Studio 1.Ctrl+E,可以显示最近编辑的文件列表 2.Shift+Click可以关闭文件 3.Ctrl+[或]可以跳到大括号的开头结尾 4.Ctrl+Shift+Backsp ...
- TTTTTTTTTTTTTTTTTT POJ 2724 奶酪消毒机 二分匹配 建图 比较难想
Purifying Machine Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5004 Accepted: 1444 ...
- UML时序图(Sequence Diagram)学习笔记
什么是时序图时序图(Sequence Diagram),又名序列图.循序图,是一种UML交互图.它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作. 让我们来看一看visio2016对时序 ...
- 7月13日考试 题解(DFS序+期望+线段树优化建图)
T1 sign 题目大意:给出一棵 N 个节点的树,求所有起点为叶节点的有向路径,其 上每一条边权值和的和.N<=10000 水题.考试的时候毒瘤出题人(学长orz)把读入顺序改了一下,于是很多 ...
随机推荐
- 【codevs1163】访问艺术馆
题目描述 皮尔是一个出了名的盗画者,他经过数月的精心准备,打算到艺术馆盗画.艺术馆的结构,每条走廊要么分叉为二条走廊,要么通向一个展览室.皮尔知道每个展室里藏画的数量,并且他精确地测量了通过每条走廊的 ...
- eclipse插件安装失败的列表如何清除-一个困扰很久的问题
平时在安装eclipse插件的时候由于网络不稳定或者下载下来的包不兼容等原因安装失败的情况很多, 但是当插件安装一次以后,就会在安装的url中留下历史记录,并且每次切换到安装插件的界面中时,后台都要检 ...
- 分分钟教会大家第一个Spring入门案例
1.下载Spring jar包,并添加到项目中. 官网地址http:springsource.org 2.在项目中新建一个类 package cn.test; public class He ...
- apt-get 按照php7后apache 输出php源文件
需要添加php7的模块 sudo apt-get install libapache2-mod-php7.0
- 08OC之Foundation框架
1.Foundation框架简述 在前面,我们创建一个类的时候,都会选择Cocoa Class.到底Cocoa Class是什么东西呢? Cocoa 不是一门编程语言,因为它可以运行在多种编程语言上, ...
- 新技能get——斜率优化
好久没写博客了……我终于回来了…… dp总是令我很头疼的问题之一,然而我还是要学一下怎么优化它. 下面请看一道题吧: [bzoj3675][Apio2014]序列分割 试题描述 小H最近迷上了一个分割 ...
- Raspberry Pi 学习笔记之一
记录几个搭建服务器教程: [教程] 将树莓派变成网络打印机服务器(更新PC和手机端设置)!http://www.eeboard.com/bbs/thread-8818-1-1.html[心得] [分享 ...
- dict.items vs six.iteritems
python2里面,dict.items返回的是数组,six.iteritems(dict)则返回生成器. 意味着,dict很大的时候,后者不占用内存. >>> import six ...
- js手机网页跳转
在网页头部加入如下代码: <script type="text/javascript"> function browserRedirect() { var sUserA ...
- C# 类成员备忘
隐藏基类的方法 调用重写或隐藏的基类方法 嵌套的类型定义 隐藏基类的方法 当从基类继承一个(非抽象)成员时,也就继承了其实现的代码,如果继承的成员是虚拟的,就可以用Overrid重写这段实现代码, 无 ...