• CityEngine基于规则贴图的实现技巧


    转自:http://blog.sina.com.cn/s/blog_841eeb5201010p3e.html

    CityEngine在贴图的实现过程有两种方式:第一种是通过i(geometryPath)规则引入外部带贴图的模型;第二种方式是通过texture(string  texturePath)规则在CityEngine内部通过规则控制来完成贴图的实现。下面通过具体的例子谈一下这两种方式在实际中的应用。

    引入外部带贴图的模型

    适用方向:模型被重复利用、结构较为复杂。

    下面以盖板为例来说一下引入外部带贴图模型的方法。

    一、     模型导出时的注意事项

    在用3DMax软件把其它格式的模型导出为CityEngine支持的部件格式(如obj)时,要选择带有贴图纹理和贴图坐标。
    CityEngine基于规则贴图的实现技巧

    默认情况下,OBJ导出选项窗口的面选项为四边形,为了减少面数据根据需要可以选择多边形;材质导出的窗口中转换位图是被选中的,此种情况下贴图的的尺寸会发生变化。下图为max模型效果与导出obj之后在max里的显示效果:
    CityEngine基于规则贴图的实现技巧

    二、     引用规则的代码与效果

    Street-->

    split(u,unitSpace,0){~3.6:Str_Tex | 0.2:color("#ff0000") X}*

    Str_Tex-->

    i("obj/gaiban.obj")
    CityEngine基于规则贴图的实现技巧
    CityEngine基于规则贴图的实现技巧

    从上面两个图可以看出不用任何贴图的代码就可以完成模型的贴图。

    通过内部规则控制实现纹理贴图

    通过内部规则控制实现纹理贴图,主要是指采用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向,texWidthtexHeight分别代表图片的尺寸所对应的实际的宽度和高度。
    texture(string texturePath)
    该规则引入相应的贴图。
    projectUV(uvSet)
    该规则通过应用相应的投影矩阵创建最终的纹理坐标。与3D Max的塌陷功能有点类似。

    CityEngine基于规则贴图的实现技巧

     引入该规则之后建筑贴图的效果。
    控制图片的重复次数
    适用范围:道路或与道路相关的具有走向的平面贴图。
    引用的规则代码:
    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有三个值的选项:uvuv;之前做了一个简单的测试发现它们的区别不是很大,在道路上贴图时一般选择uv项;uvNormalizeType有两个值的选项:separatePerFacecollectiveAllFaces,之前采用第一个值时发现贴图时并不按走向进行贴的,一般选择第二个值。
    scaleUV(float uvSet, float uFactor, float vFactor)
    该规则约束了当前贴图时的重复次数,其中uFactor代表长度方向上的重复次数,vFactor代表宽度方向上重复次数。
    CityEngine基于规则贴图的实现技巧 
    附注:本文档提供的规则代码可以在实际中实用,通过调整某些参数的值我们将会更清晰的理解这些规则、更好的实用这些规则。由于水平有限,其中的内容有解释不清的地方敬请雅正。

  • 相关阅读:
    传统神经网络ANN训练算法总结 参考 。 以后研究
    delphi 按钮 2 行
    用BP人工神经网络识别手写数字
    神经网络 fann 教程 英文 以及 翻译 参考
    【黑科技】花几分钟和孩子动手DIY,即可用手机完成全息影像!
    delphi 神经网络 学习
    "如何用70行Java代码实现深度神经网络算法" 的delphi版本
    cvAddWeighted 进行图片融合
    SetWindowsHookEx 其他进程的 记录
    DELPHI 通過窗口句柄或窗口标题得到进程句柄
  • 原文地址:https://www.cnblogs.com/qingsunny/p/4460489.html
Copyright © 2020-2023  润新知