UE4 绘制简单三角形(五)

UE4 绘制简单三角形(五)

使用FRawMesh绘制两个三角形面片,并赋予不同的材质,生成本地资源StaticMesh
在这里插入图片描述

   //设定模型名字
	FString MeshName = "TestRawMesh";
	//设定包的路径
	FString PackageName = "/Game/" + MeshName;
	//创建包
	UPackage* MeshPackage = CreatePackage(nullptr, *PackageName);
	//创建StaticMesh资源
	UStaticMesh* StaticMesh = NewObject< UStaticMesh >(MeshPackage, FName(*MeshName), RF_Public | RF_Standalone);
	//测试RawMesh
	FRawMesh RawMesh;
	//顶点位置数据,一个直角三角形
	RawMesh.VertexPositions.Add(FVector(0, 0, 0));
	RawMesh.VertexPositions.Add(FVector(100, 0, 0));
	RawMesh.VertexPositions.Add(FVector(100, 100, 0));
	RawMesh.VertexPositions.Add(FVector(0, 100, 0));
	//索引数据
	RawMesh.WedgeIndices.Add(0);
	RawMesh.WedgeIndices.Add(2);
	RawMesh.WedgeIndices.Add(1);

	RawMesh.WedgeIndices.Add(0);
	RawMesh.WedgeIndices.Add(3);
	RawMesh.WedgeIndices.Add(2);

	//接下来的数据并不重要,只是需要满足Array的长度以能通过 FRawMesh::IsValid()
	RawMesh.WedgeTexCoords[0].Add(FVector2D(0, 0));
	RawMesh.WedgeTexCoords[0].Add(FVector2D(1, 0));
	RawMesh.WedgeTexCoords[0].Add(FVector2D(0, 1));

	RawMesh.WedgeTexCoords[0].Add(FVector2D(0, 0));
	RawMesh.WedgeTexCoords[0].Add(FVector2D(1, 1));
	RawMesh.WedgeTexCoords[0].Add(FVector2D(1, 0));

	//每一个face对应一个材质slot 
	RawMesh.FaceMaterialIndices.Add(0);
	RawMesh.FaceMaterialIndices.Add(1);

	RawMesh.FaceSmoothingMasks.Add(0);
	RawMesh.FaceSmoothingMasks.Add(1);

	RawMesh.WedgeTangentX.Add(FVector(1, 0, 0));
	RawMesh.WedgeTangentX.Add(FVector(1, 0, 0));
	RawMesh.WedgeTangentX.Add(FVector(1, 0, 0));
	RawMesh.WedgeTangentX.Add(FVector(1, 0, 0));
	RawMesh.WedgeTangentX.Add(FVector(1, 0, 0));
	RawMesh.WedgeTangentX.Add(FVector(1, 0, 0));

	RawMesh.WedgeTangentY.Add(FVector(0, 1, 0));
	RawMesh.WedgeTangentY.Add(FVector(0, 1, 0));
	RawMesh.WedgeTangentY.Add(FVector(0, 1, 0));
	RawMesh.WedgeTangentY.Add(FVector(0, 1, 0));
	RawMesh.WedgeTangentY.Add(FVector(0, 1, 0));
	RawMesh.WedgeTangentY.Add(FVector(0, 1, 0));


	RawMesh.WedgeTangentZ.Add(FVector(0, 0, 1));
	RawMesh.WedgeTangentZ.Add(FVector(0, 0, 1));
	RawMesh.WedgeTangentZ.Add(FVector(0, 0, 1));
	RawMesh.WedgeTangentZ.Add(FVector(0, 0, 1));
	RawMesh.WedgeTangentZ.Add(FVector(0, 1, 0));
	RawMesh.WedgeTangentZ.Add(FVector(0, 1, 0));


	if (!RawMesh.IsValid())
		return;
	//创建StaticMeshSourceModel
	StaticMesh->PreEditChange(nullptr);
	FStaticMeshSourceModel& SrcModel = StaticMesh->AddSourceModel();
	SrcModel.SaveRawMesh(RawMesh);
	//对StaticMesh进行Build
	TArray< FText > BuildErrors;
	StaticMesh->Build(true, &BuildErrors);
	//随后通知Asset创建
	FAssetRegistryModule::AssetCreated(StaticMesh);

参考

  1. UE4绘制简单三角形(一)
  2. UE4绘制简单三角形(二)
  3. UE4绘制简单三角形(三)
  4. UE4绘制简单三角形(四)
  5. UE4尝试用C++生成一个最简单的StaticMesh
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值