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



  当a=-4时:




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值