在Unity中我们可以实现动态网格,并将部分信息写入(顶点,UV,法线信息,切线信息);

首先明确一点的是Unity采用的坐标系
坐标系
在unity当中,采用的 左手坐标系
顶点Vertex
因为Unity空间坐标系是基于左手,网格亦是遵循此规则,
在生成顶点Vertex时,是按照左下角开始,向右上角逐个生成.
其中Z分量越大,则深度越大,分量越小,则高度越高.
多边形Triangle
在完成顶点坐标的确定之后,需要对mesh的多边形进行设置,
这里要注意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 +=

3518

被折叠的 条评论
为什么被折叠?



