用unity画抛物面

来源:互联网 发布:mac怎么使用投影仪 编辑:程序博客网 时间:2024/05/18 02:20

我想用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时:




原创粉丝点击