UE怎么在C++中求procdeural mesh切线数组
时间: 2024-03-21 19:38:12 浏览: 121
在UE4中,我们可以使用以下函数来获取Procedural Mesh的切线数组:
```cpp
void UProceduralMeshComponent::CalculateTangentsForMesh(const TArray<FVector>& Vertices, const TArray<int32>& Triangles, const TArray<FVector2D>& UVs, const TArray<FVector>& Normals, TArray<FProcMeshTangent>& OutTangents)
```
这个函数将计算出每个三角形的切线和副切线,并将它们存储在OutTangents数组中。该函数需要传入以下参数:
- Vertices:包含所有顶点位置的数组。
- Triangles:包含所有三角形顶点索引的数组。
- UVs:包含所有顶点UV坐标的数组。
- Normals:包含所有顶点法线的数组。
- OutTangents:用于存储切线和副切线的数组(输出参数)。
在你的代码中,你可以这样使用这个函数:
```cpp
// 假设你已经定义了Vertices、Triangles和UVs数组,并且已经添加到了Procedural Mesh Component中
TArray<FVector> Normals; // 定义一个空的法线数组
TArray<FProcMeshTangent> Tangents; // 定义一个空的切线数组
// 计算法线数组
for (int32 i = 0; i < Triangles.Num(); i += 3)
{
FVector const& v0 = Vertices[Triangles[i]];
FVector const& v1 = Vertices[Triangles[i + 1]];
FVector const& v2 = Vertices[Triangles[i + 2]];
FVector const Edge1 = v1 - v0;
FVector const Edge2 = v2 - v0;
FVector const Normal = (Edge1 ^ Edge2).GetSafeNormal();
Normals.Add(Normal);
}
// 计算切线数组
ProceduralMesh->CalculateTangentsForMesh(Vertices, Triangles, UVs, Normals, Tangents);
// 将切线数组应用到Procedural Mesh Component中
ProceduralMesh->SetTangents(0, Tangents);
```
这个例子计算了每个三角形的法线,并将它们存储在Normals数组中。然后,它调用了CalculateTangentsForMesh函数,计算了每个三角形的切线和副切线,并将它们存储在Tangents数组中。最后,它将切线数组应用到Procedural Mesh Component中,使其显示正确的光照效果。
请注意,这个例子仅用于演示目的,实际使用时,你需要根据你的需求修改参数和函数。
阅读全文