官方配置链接如下:https://wiki.unrealengine.com/Procedural_Mesh_Component_in_C++:Getting_Started
这里只是简单介绍一下
中文解释:程序网格
特点:可任意变形(当然变形之后的有关参数需要update)
创建:CreateMeshSection或者CreateMeshSection_LinearColor();(推荐后者)
CreateMeshSection_LinearColor
(
int32 SectionIndex,//编号默认为0
const TArray< FVector >& Vertices,//所有网格顶点的坐标最好按照顺序排列
const TArray< int32 >& Triangles,//组成三角面的顶点顺序,最好顺时针,与前一个参数关联很大
const TArray< FVector >& Normals,//每个顶点的法线,与第二个参数顺序一致,数组大小一致(可以不填)
const TArray< FVector2D >& UV0,//顶点的UV坐标,与第二个参数顺序一致,数组大小一样(可以不填)
const TArray< FLinearColor >& Vert...,//不做讲解,可以不写,直接填一个空的数组
const TArray< FProcMeshTangent >& ...,//不做讲解,可以不写,直接填一个空的数组
bool bCreateCollision//是否具有碰撞
)
创建时,需要的最少的参数为四个SectionIndex、 Vertices、Triangles、bCreateCollision,其余都可以填写空的数组,接下来稍微分析一下几个参数
1.编号:略
2.网格顶点顺序
需要事先将每个顶点XYZ的坐标,按照一定的顺序排列好,这个顺序直接影响后面几个参数的顺序
3.三角面的顺序
学过OpenGL的同学应该对这部分比较熟悉,任何面都可以由很多的三角面组成,三角面的顶点名称相当于网格顶点数组的下标,一般从0开始,三角面是一个一维数组,每三个为一个面,数组的长度必定是三的倍数。函数会按照三个一组的策略,把每个顶点的名称填入网格顶点坐标数组,然后利用实际的坐标生成三角面。这样一点一点填满整个面。
4.顶点法线
这部分可以不填,但会影响光照。当你必须要计算反光效果时候,这些参数必须计算。顶点的法线一般可以理解为:在该点所在的三角面上由该点与另外的两个点组成的两个向量的叉乘(一般向量方向由右手法则来确定),叉乘结果再归一化。
在这里又会有一个问题:每个顶点所在的三角面不止一个,而且数量不固定,那么当一个顶点有多个面的时候,就需要计算多个面的法线然后再相加,最后归一化,这个的计算量非常大。这里给出一种比较简单的解决办法。
1)先创建一个法线数组,数组的大小等于网格顶点坐标的数量
2)对三角面进行循环,计算每个三角面的顶点的法线,计算完成后,按照每个顶点的名称加入数组(加入:加减乘除的加)(数组的下标就是顶点的名称)
3)计算完成后对每个法线进行归一化
5.UV坐标
如果你的网格不需要贴图,这步可以忽略。UV都是0-1,具体的就是用一去除以行数和列数得到每个坐标的距离,然后自己稍微写个循环乘一下就好
先写到这里,等有时间再多些几个公式,最后附上一部分官方的数据