zoukankan      html  css  js  c++  java
  • 自动检测海岸线,生成海浪网格







      谈这个主题不得不又提到Farcry,它实在是室外场景渲染的领先者。在Farcry中,沿着海岸线连绵不绝的海浪玩过的人肯定都有印象,十分接近我在海南看到的景象了。在Farcry中由于海岸线漫长,如果这些海浪网格都由手工编辑无疑是个单调且巨大的任务。最近按着自己的想法试着由程序自动检测海岸线并生成海浪网格。经过几天的调试,居然已经非常接近Farcry中的效果,这使我相信Farcry就是这么做的。当然要完全达到Farcry中的效果还要仔细调整程序,也要美术付出相当的努力。下面就简单谈谈其中的方法。



      图中橙色区域代表陆地,浅蓝色区域代表水面。绿色网格代表高度图网格,可以是一个地形单位(一个Patch),也可以是任意范围的地形。深红色曲线代表海岸线。整个检测及构造过程分为下面几步:

        1.遍历地形网格的所有边,如果一个边的一个端点高于水面,另一个端点低于水面,则通过差值找到这条边和水面的焦点并加入链表。通过遍历可以找到图上1至14点。
        2.由于第一步遍历时是按网格顺序的,并不能保证得到的顶点是按海岸线顺序排列的,所以需要进行一次排序保证这些点按海岸线顺序排列,也就是图上标号的顺序。需要指出的是第6和13点由于距离前一点太近在排序过程中被抛弃。
        3.计算海岸线上每一点在水平方向的法线,法线方向指向水面方向。
        4.因为地面网格精度很低,生成的法线一般变化比较突然,不平滑,所以对上一步生成的法线进行多次过滤(与旁边的顶点法线相加取平均值)。
        5.将海岸线上每一点沿法线方向扩展一定宽度得到另一组顶点。
        6.根据前面得到的两组顶点生成表示海浪的三角形网格条带。
        7.为每一个顶点计算正确的UV和颜色值。

        经过上面的步骤就可以绘制海浪效果了,不过要达到Farcry中的效果还需要合适的贴图和适当的VertexShader和PixelShader。这里面也有一些技巧,这里就不细说了。

  • 相关阅读:
    dotnet core 3.0 linux 部署小贴士
    Akka.net 性能测试兼使用小技巧
    如何给小学生讲清楚ECC椭圆曲线加密
    Typescript骚操作,在TS里面直接插入HTML
    源自于NEO的KeyValue 数据库面世啦
    编译ROCKSDB总结
    Windows linux子系统 使用说明
    dotnetcore http服务器研究(二)性能分析
    dotnetcore Http服务器研究(一)
    使用信号量来 限制无边界池子与队列
  • 原文地址:https://www.cnblogs.com/cproom/p/485748.html
Copyright © 2011-2022 走看看