Unity 动态生成网格

在Unity中我们可以实现动态网格,并将部分信息写入(顶点,UV,法线信息,切线信息);
在这里插入图片描述
首先明确一点的是Unity采用的坐标系

坐标系


在unity当中,采用的 左手坐标系
左手坐标系
左手坐标系

顶点Vertex


因为Unity空间坐标系是基于左手,网格亦是遵循此规则,
在生成顶点Vertex时,是按照左下角开始,向右上角逐个生成.
其中Z分量越大,则深度越大,分量越小,则高度越高.
顶点位置

多边形Triangle


在完成顶点坐标的确定之后,需要对mesh的多边形进行设置,
这里要注意2个问题:

  1. 对图形内外的判断:
    因为三角形是通过顶点索引数组定义的.由于每个三角形都有三个点,因此三个连续的索引描述一个三角形.
    而这个方向是按照顶点序列的顺时针进行判断的,因此,我们可以通过左手定则进行判断内外.
    所以要正确显示,就需要按照正确的顶点序列去构建三角形数组.
    请添加图片描述
    左手定则
  2. 构建三角形数组
    在搞清楚顺序之后,我们可以先按照顺序构建一行4个三角形,这样便于我们发现规律
    在这里插入图片描述
    顶点相邻关系
    因为每两个相邻的三角形会共用两个顶点,且每6次就会迭代一次
    迭代关系
    这样我们得出这一行的规律:
		int[] triangles = new int[xSize * 6];
		for (int ti = 0, vi = 0, x = 0; x < xSize; x++, ti += 6, vi++) {
   
   
			triangles[ti] = vi;
			triangles[ti + 3] = triangles[ti + 2] = vi + 1;
			triangles[ti + 4] = triangles[ti + 1] = vi + xSize + 1;
			triangles[ti + 5] = vi + xSize + 2;
		}

再按照这一规律拓展到每一行:

        int[] triangles = new int[xSize * ySize * 6];
        for (int ti = 0, vi = 0, y = 0; y < ySize; y++, vi++)
        {
   
   
            for (int x = 0; x < xSize; x++, ti += 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值