UE修改StaticMesh并生成

通过已有的顶点坐标来生成静态网格体

需要加上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);	
	//创建StaticMesh资源
	UStaticMesh *StaticMeshDst = NewObject< UStaticMesh >(MeshPackage, FName(*MeshName), RF_Public | RF_Standalone);
	//表明将要更改StaticMeshDst
	StaticMeshDst->PreEditChange(nullptr);
	
	//遍历源网格体的所有LOD
	TArray<FString> VertexArray;
	FFileHelper::LoadFileToStringArray(VertexArray, *VertexPath);
	for (int LOD = 0; LOD < StaticMeshSrc->GetSourceModels().Num(); LOD++)
	{
		//获得源网格体的RawMesh
		FRawMesh RawMesh;
		StaticMeshSrc->GetSourceModels()[LOD].LoadRawMesh(RawMesh);

		//获取文件里的顶点坐标
		for (int VertexId = 0; VertexId < RawMesh.VertexPositions.Num(); VertexId++)
		{
			//顶点文件解析
			//-1.905552:10.852005:143.153931
			//-2.098196:10.690375:143.015198
			//-2.263508:10.523566:142.888840
			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();
		//把修改后的RawMesh保存到目标网格体
		SrcModel.SaveRawMesh(RawMesh);
	}

	TArray<FText> BuildErrors;
	//构建目标网格体
	StaticMeshDst->Build(true, &BuildErrors);
	FAssetRegistryModule::AssetCreated(StaticMeshDst);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值