——可能是因为搞得东西逐渐底层化,主要作为上层支持的蓝图开始逐渐吃力了_(:з)∠)_所以姑且先搁置。
——其实UE还有个叫ProceduralMesh(PM)的东西可以用节点连,PM也是我觉得处理逻辑(舒适度)最接近U3D的方式。
——不过因为本篇讲的东西已经够多了,PM之后有时间再单开一篇来说吧。
UE C++
//数据遍历
for (uint32 i = 0; i < PosBuffer.GetNumVertices(); i++) PosBuffer.VertexPosition(i);//坐标
for (uint32 i = 0; i < ColBuffer .GetNumVertices(); i++) ColBuffer .VertexColor(i);//顶点色
for (uint32 i = 0; i < VertBuffer.GetNumVertices(); i++)
{
VertBuffer.VertexTangentX(i);//切线
VertBuffer.VertexTangentY(i);//副切线
VertBuffer.VertexTangentZ(i);//法线(没错,TangentZ是法线,坑爹的命名)
}
for (uint32 i = 0; i < VertBuffer.GetNumVertices(); i++)//第几个顶点的UV
{
for (uint8 uvID = 0; uvID < VertBuffer.GetNumTexCoords(); uvID++)//第几个UV通道
{
VertBuffer.GetVertexUV(i, uvID);
}
}
for (uint32 i = 0; i < IdBuffer.GetNumIndices(); i++) IdBuffer.GetIndex(i);//三角索引
//Section数据(遍历材质ID)
const FStaticMeshLODResources::FStaticMeshSectionArray& Sections = CurrentLOD.Sections;
for (uint8 secID = 0; secID < Sections.Num(); secID++)
{
const FStaticMeshSection& CurrentSec = Sections[secID];
for (uint32 i = CurrentSec.MinVertexIndex; i <= CurrentSec.MaxVertexIndex; i++)//这里的index对应VBuffers中的顶点索引,而不是IdBuffer中的三角索引
{
CurrentSec.MaterialIndex;
}
}
2、RawMesh