用unity画抛物面

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

用unity画抛物面_第1张图片


  当a=-4时:

用unity画抛物面_第2张图片



你可能感兴趣的:(用unity画抛物面)