通过已有的顶点坐标来生成静态网格体
需要加上RawMesh模块
PrivateDependencyModuleNames.AddRange(new string[]
{
...,
"RawMesh",
}
FString StaticMeshPath = "StaticMesh'/Game/fbx/tou_Rig.tou_Rig'";
FString VertexPath = FPaths::ProjectSavedDir() + "ConformalVertices/ConformalVertices2.txt";
UStaticMesh* StaticMeshSrc = LoadObject<UStaticMesh>(nullptr, *StaticMeshPath);
FString MeshName = "TestSM";
FString PackageName = "/Game/Mesh/"+ MeshName;
UPackage * MeshPackage = CreatePackage(nullptr, *PackageName);
UStaticMesh *StaticMeshDst = NewObject< UStaticMesh >(MeshPackage, FName(*MeshName), RF_Public | RF_Standalone);
StaticMeshDst->PreEditChange(nullptr);
TArray<FString> VertexArray;
FFileHelper::LoadFileToStringArray(VertexArray, *VertexPath);
for (int LOD = 0; LOD < StaticMeshSrc->GetSourceModels().Num(); LOD++)
{
FRawMesh RawMesh;
StaticMeshSrc->GetSourceModels()[LOD].LoadRawMesh(RawMesh);
for (int VertexId = 0; VertexId < RawMesh.VertexPositions.Num(); VertexId++)
{
dna::Vector3 XYZtemp;
FString Left, Right;
VertexArray[VertexId].Split(":", &Left, &Right);
XYZtemp.x = FCString::Atof(*Left);
Right.Split(":", &Left, &Right);
XYZtemp.y = FCString::Atof(*Left);
XYZtemp.z = FCString::Atof(*Right);
RawMesh.VertexPositions[VertexId].X = XYZtemp.x;
RawMesh.VertexPositions[VertexId].Y = XYZtemp.y;
RawMesh.VertexPositions[VertexId].Z = XYZtemp.z;
}
FStaticMeshSourceModel & SrcModel = StaticMeshDst->AddSourceModel();
SrcModel.SaveRawMesh(RawMesh);
}
TArray<FText> BuildErrors;
StaticMeshDst->Build(true, &BuildErrors);
FAssetRegistryModule::AssetCreated(StaticMeshDst);