我想用mesh画一个圆滑的小山峰,之前有高手提到用贝塞尔曲线,我研究了一下,但是还是不会,所以最后用抛物线公式来完成。抛物线公式y=a*x*x+b*x+c;a>0,开口向上;a<0,开口向下。b=0,抛物线对称轴为y轴。c=0,抛物线经过原点。获取一些抛物线上的点,然后相邻的两点和原点画三角面,这样可以用三角面拼成了“抛物面”了,而且还可以通过修改a的值来改变小山峰的陡峭程度。下面来看看代码吧,呵呵~~~
新建一个空的GameObject,然后绑定Parabola.js脚本就ok了。
Parabola.js:
private var a:int;//a>0,开口向上;a<0,开口向下。 private var b:int;//b=0,抛物线对称轴为y轴 private var c:int;//c=0,抛物线经过原点 private var size:int; function Start () { a=-1; b=0; c=0; size=22; gameObject.AddComponent("MeshFilter"); gameObject.AddComponent("MeshRenderer"); var mesh : Mesh = GetComponent(MeshFilter).mesh; mesh.Clear(); var v:Vector3[]=new Vector3[size]; var v2:Vector2[]=new Vector2[size]; var index:int []=new int[(size-2)*3]; for(var i:int=0;i<size;i++){ if(i==0) { v[i]=Vector3(0,-1,0); } else { var x:float=(i-size/2)*0.1; v[i].x=x; v[i].y=a*x*x+b*x+c; v[i].z=0; } if(i>1){ index[3*i-6]=0; index[3*i-5]=i-1; index[3*i-4]=i; } print("v["+i+"]="+v[i]); } mesh.vertices = v; mesh.uv = v2; mesh.triangles = index; for(var j:int=0;j<index.Length;j++){ print(j+"=="+index[j]); } }
当a=-1时:
当a=-4时: