【Unity】Mesh网格编程(二)流体通过Mesh网格随Sin函数实时变化模拟液体的流动,从而达到动态水的效果。对,你没有看错。这是本博客的一个系列,但同时也是一篇转载。原文已经做得很棒了!不做重复工作,直接转入本系列中。Mesh网格编程(一)流体水本文通过Mesh网格随Sin函数实时变化模拟液体的流动,从而达到动态水的效果。本文分享自蓝鸥科技杜老师。Mesh网格编程步骤:一:确定数量确定该几何图形应有多少个三角形面,顶点坐标、顶点序列、UV贴图、法线向量皆为三角形面数的三倍。二:根据三角形面确定顶点坐标这里我****惯把一个面的顶点确定好之后再去找下一个面,这样做可以是法线和顶点序列确定起来很容易。但是要注意的是在确定顶点时要按照顺时针顺序确定,否则会导致三角形面相反。三:确定法线法线大致分为两种:其一是棱角分明的几何体,这种几何体的法线可以用确定好的顶点坐标两两相减,得到的向量做叉乘并赋值给三个顶点上的法线。其二是圆滑的几何体,这种几何体需要求出该点在曲面上的切线,从而确定垂直于切线的法线。如果是圆形。可以使用顶点减圆心所得的向量。此外,求得的法线尽量单位化,否则可能出现一个面上的颜色不同。四:确定顶点序列若三角形顶点按照面数去确定,顶点序列就会变得非常简单,按顺序赋值即可。五:确定UV贴图根据所做几何体的不同,贴图左边也会有所改变,并不固定。六:创建网格实现代码如下:;;:MonoBehaviour{;=10;//=10;//=3;//=10;//[]vs;//[]ts;//[]newUVs;//[]newNormals;//(){=((tier+1)*8+4)*3;//=newVector3[temp];=newint[temp];=newVector2[temp];=newVector3[temp];=2*;//=0;(inti=0;i<tier;i++){=i*length/tier-length/2;=(i+1)*length/tier-length/2;34.//[count]=newVector3(pos1,(+i*dis),width);[count+1]=newVector3(pos2,(+(i+1)*dis),-width);[count+2]=newVector3(pos1,(+i*dis),-width);[count+3]=newVector3(pos1,(+i*dis),width);[count+4]=newVector3(pos2,(+(i+1)*dis),width);[count+5]=newVector3(pos2,(+(i+1)*dis),-width);42.//[count]=(newVector3(1,(+i*dis),0));[count+1]=(newVector3(1,(+(i+1)*dis),0));[count+2]=(newVector3(1,(+i*dis),0));[count+3]=(newVector3(1,(+i*dis),0));4
【unity】mesh网格编程(二)流体 来自淘豆网www.taodocs.com转载请标明出处.