unity 如何继承panel容器类 unity的cube_赋值

 

绘制Cube的一个面其实是两个三角形拼成的。首先要弄清楚怎么绘制一个三角形,绘制三角形的三个顶点是怎么确定的。

unity 如何继承panel容器类 unity的cube_数组_02

首先我们定义一个int类型的数值,并赋予三个顶点,我们要搞清楚一个Cube的8个顶点是怎么排序的,所以先看一个面的四个顶点怎么分布。先随便给三个点,mCubeMeshRender.mesh.SetTriangles(newTriangles, 0)    赋值之后,运行效果如下:

unity 如何继承panel容器类 unity的cube_赋值_03

顶点0,2,3顺序绘制出的三角形以及剩下的3的顶点位置如上,由于unity使用的是左手坐标系,顺指针绘制,所以初步推测0,1,2,3的位置如下。

unity 如何继承panel容器类 unity的cube_顺时针_04

进行验证,数组中的顶点顺序交换位置newTriangles = new int[3] {0,1,2};  运行结果如下:

unity 如何继承panel容器类 unity的cube_顺时针_05

 

三角形边边是有了,可是怎么看不到面呢??视角调整到三角形背面后0,1,2顺序绘制出的三角形:

unity 如何继承panel容器类 unity的cube_赋值_06

 

so,证明了之前的推测是对的,三角形的绘制是根据三个顶点顺时针绘制!!

 

好了,知道了正确的三角形的顶点顺序后继续绘制面。newTriangles = new int[6] {0, 2, 1, 2, 3, 1};(红色数字表示顶点,绿色数字表示三角形绘制顺序)

unity 如何继承panel容器类 unity的cube_unity 如何继承panel容器类_07

 

之后再绘制一个顶面,不知道顶面的四个点的顺序,还是先随便写三个接在前面6个点之后newTriangles = new int[9] {0, 2, 1, 2, 3, 1,2, 4, 5};运行结果如下

unity 如何继承panel容器类 unity的cube_顺时针_08

 

那最后就只差一个三角形了,继续加三个点newTriangles = new int[12] {0, 2, 1, 2, 3, 1,2, 4, 5,2, 5, 3}; 

unity 如何继承panel容器类 unity的cube_赋值_09

画是画出来了,但是和旁边的完整cube一比,咋感觉不对劲啊。之后经过多番验证,出现这个问题的原因是三角形绘制不在一个面时,不能共用顶点!!

也就是说前面0,2,3,1四个点绘制的两个三角形形成一个面,顶面虽然也有2,3两个顶点,但是绘制过程中必须重新取两个数字,而不能再用到2,3。也就是说把2换成8,3换成9。newTriangles = new int[12] {0, 2, 1, 2, 3, 1,8, 4, 5,8, 5, 9};  

 

为啥不能换成6,7呢?因为三角形8个顶点用到了0-7,所以得用其他数字。

unity 如何继承panel容器类 unity的cube_赋值_10

 

那除了8,9还能换成其他数字吗?

经验证,不能。也不能使用不相邻的数字,比如8,10

我的理解是三角形顶点到7,后面绘制也需要是相邻7的数字.

 newTriangles = new int[18] {0, 2, 1, 2, 3, 1,8, 4, 5,8, 5, 9,4,6,7,5,4,7}; 绘制如下

 

unity 如何继承panel容器类 unity的cube_赋值_11

 

把后面的6,7所在面的4,5换成10,11,newTriangles = new int[18] {0, 2, 1, 2, 3, 1,8, 4, 5,8, 5, 9,10,6,7,11,10,7};

unity 如何继承panel容器类 unity的cube_unity 如何继承panel容器类_12

 

以上就是绘制Cube面,总结:

1.绘制三角形时,顺序是顺时针。

2.不同面的三角形不能共用相同顶点。

3.cube顶点0-7,顶点数必须是相邻数字。