2021-06-09 19:22:10 -04:00
|
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
|
|
|
|
|
|
#include "ConversionUtils/DynamicMeshViaMeshDescriptionUtil.h"
|
|
|
|
|
|
|
|
|
|
#include "TargetInterfaces/MeshDescriptionCommitter.h"
|
|
|
|
|
#include "TargetInterfaces/MeshDescriptionProvider.h"
|
|
|
|
|
#include "DynamicMeshToMeshDescription.h"
|
|
|
|
|
#include "MeshConversionOptions.h" //FConversionToMeshDescriptionOptions
|
|
|
|
|
#include "MeshDescriptionToDynamicMesh.h"
|
|
|
|
|
|
2021-11-24 23:55:31 -05:00
|
|
|
FDynamicMesh3 UE::Geometry::GetDynamicMeshViaMeshDescription(
|
2023-11-03 14:59:41 -04:00
|
|
|
IMeshDescriptionProvider& MeshDescriptionProvider, bool bRequestTangents)
|
2021-06-09 19:22:10 -04:00
|
|
|
{
|
2021-11-24 23:55:31 -05:00
|
|
|
FDynamicMesh3 DynamicMesh;
|
2021-06-09 19:22:10 -04:00
|
|
|
FMeshDescriptionToDynamicMesh Converter;
|
2022-11-30 10:38:46 -05:00
|
|
|
Converter.bVIDsFromNonManifoldMeshDescriptionAttr = true;
|
2023-11-03 14:59:41 -04:00
|
|
|
if (bRequestTangents)
|
|
|
|
|
{
|
|
|
|
|
FGetMeshParameters GetMeshParams;
|
|
|
|
|
GetMeshParams.bWantMeshTangents = true;
|
|
|
|
|
FMeshDescription MeshDescriptionCopy = MeshDescriptionProvider.GetMeshDescriptionCopy(GetMeshParams);
|
|
|
|
|
Converter.Convert(&MeshDescriptionCopy, DynamicMesh, bRequestTangents);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Converter.Convert(MeshDescriptionProvider.GetMeshDescription(), DynamicMesh, bRequestTangents);
|
|
|
|
|
}
|
2021-06-09 19:22:10 -04:00
|
|
|
return DynamicMesh;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void UE::Geometry::CommitDynamicMeshViaMeshDescription(
|
2021-12-06 12:42:19 -05:00
|
|
|
FMeshDescription&& CurrentMeshDescription,
|
2021-06-09 19:22:10 -04:00
|
|
|
IMeshDescriptionCommitter& MeshDescriptionCommitter,
|
|
|
|
|
const FDynamicMesh3& Mesh, const IDynamicMeshCommitter::FDynamicMeshCommitInfo& CommitInfo)
|
|
|
|
|
{
|
|
|
|
|
FConversionToMeshDescriptionOptions ConversionOptions;
|
|
|
|
|
ConversionOptions.bSetPolyGroups = CommitInfo.bPolygroupsChanged;
|
|
|
|
|
ConversionOptions.bUpdatePositions = CommitInfo.bPositionsChanged;
|
|
|
|
|
ConversionOptions.bUpdateNormals = CommitInfo.bNormalsChanged;
|
|
|
|
|
ConversionOptions.bUpdateTangents = CommitInfo.bTangentsChanged;
|
|
|
|
|
ConversionOptions.bUpdateUVs = CommitInfo.bUVsChanged;
|
|
|
|
|
ConversionOptions.bUpdateVtxColors = CommitInfo.bVertexColorsChanged;
|
2021-08-11 20:29:24 -04:00
|
|
|
ConversionOptions.bTransformVtxColorsSRGBToLinear = CommitInfo.bTransformVertexColorsSRGBToLinear;
|
2021-06-09 19:22:10 -04:00
|
|
|
|
2021-12-06 12:42:19 -05:00
|
|
|
FDynamicMeshToMeshDescription Converter(ConversionOptions);
|
|
|
|
|
if (!CommitInfo.bTopologyChanged)
|
2021-06-09 19:22:10 -04:00
|
|
|
{
|
2021-12-06 12:42:19 -05:00
|
|
|
Converter.UpdateUsingConversionOptions(&Mesh, CurrentMeshDescription);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// Do a full conversion.
|
|
|
|
|
Converter.Convert(&Mesh, CurrentMeshDescription);
|
|
|
|
|
}
|
2021-06-09 19:22:10 -04:00
|
|
|
|
2021-12-06 12:42:19 -05:00
|
|
|
MeshDescriptionCommitter.CommitMeshDescription(MoveTemp(CurrentMeshDescription));
|
2021-06-09 19:22:10 -04:00
|
|
|
}
|