You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
Fix usage of embree with LWC for mesh distance fields and cards
#jira UE-117476 #rb Krzysztof.Narkowicz [CL 16624221 by Ben Ingram in ue5-main branch]
This commit is contained in:
@@ -31,19 +31,19 @@ bool EmbreePointQueryFunction(RTCPointQueryFunctionArguments* args)
|
||||
const int32 TriangleIndex = args->primID;
|
||||
check(TriangleIndex < Context->NumTriangles);
|
||||
|
||||
const FVector* VertexBuffer = (const FVector*)rtcGetGeometryBufferData(Context->MeshGeometry, RTC_BUFFER_TYPE_VERTEX, 0);
|
||||
const FVector3f* VertexBuffer = (const FVector3f*)rtcGetGeometryBufferData(Context->MeshGeometry, RTC_BUFFER_TYPE_VERTEX, 0);
|
||||
const uint32* IndexBuffer = (const uint32*)rtcGetGeometryBufferData(Context->MeshGeometry, RTC_BUFFER_TYPE_INDEX, 0);
|
||||
|
||||
const uint32 I0 = IndexBuffer[TriangleIndex * 3 + 0];
|
||||
const uint32 I1 = IndexBuffer[TriangleIndex * 3 + 1];
|
||||
const uint32 I2 = IndexBuffer[TriangleIndex * 3 + 2];
|
||||
|
||||
const FVector V0 = VertexBuffer[I0];
|
||||
const FVector V1 = VertexBuffer[I1];
|
||||
const FVector V2 = VertexBuffer[I2];
|
||||
const FVector3f V0 = VertexBuffer[I0];
|
||||
const FVector3f V1 = VertexBuffer[I1];
|
||||
const FVector3f V2 = VertexBuffer[I2];
|
||||
|
||||
const FVector QueryPosition(args->query->x, args->query->y, args->query->z);
|
||||
const FVector ClosestPoint = FMath::ClosestPointOnTriangleToPoint(QueryPosition, V0, V1, V2);
|
||||
const FVector3f QueryPosition(args->query->x, args->query->y, args->query->z);
|
||||
const FVector3f ClosestPoint = FMath::ClosestPointOnTriangleToPoint(QueryPosition, V0, V1, V2);
|
||||
const float QueryDistanceSq = (ClosestPoint - QueryPosition).SizeSquared();
|
||||
|
||||
if (QueryDistanceSq < ClosestDistanceSq)
|
||||
|
||||
@@ -137,11 +137,11 @@ void MeshRepresentation::SetupEmbreeScene(
|
||||
const uint32 I1 = SourceMeshData.TriangleIndices[TriangleIndex * 3 + 1];
|
||||
const uint32 I2 = SourceMeshData.TriangleIndices[TriangleIndex * 3 + 2];
|
||||
|
||||
const FVector V0 = SourceMeshData.VertexPositions[I0];
|
||||
const FVector V1 = SourceMeshData.VertexPositions[I1];
|
||||
const FVector V2 = SourceMeshData.VertexPositions[I2];
|
||||
const FVector3f V0 = SourceMeshData.VertexPositions[I0];
|
||||
const FVector3f V1 = SourceMeshData.VertexPositions[I1];
|
||||
const FVector3f V2 = SourceMeshData.VertexPositions[I2];
|
||||
|
||||
const FVector TriangleNormal = ((V1 - V2) ^ (V0 - V2));
|
||||
const FVector3f TriangleNormal = ((V1 - V2) ^ (V0 - V2));
|
||||
const bool bDegenerateTriangle = TriangleNormal.SizeSquared() < SMALL_NUMBER;
|
||||
if (!bDegenerateTriangle)
|
||||
{
|
||||
@@ -158,11 +158,11 @@ void MeshRepresentation::SetupEmbreeScene(
|
||||
const uint32 I1 = Indices[TriangleIndex * 3 + 1];
|
||||
const uint32 I2 = Indices[TriangleIndex * 3 + 2];
|
||||
|
||||
const FVector V0 = LODModel.VertexBuffers.PositionVertexBuffer.VertexPosition(I0);
|
||||
const FVector V1 = LODModel.VertexBuffers.PositionVertexBuffer.VertexPosition(I1);
|
||||
const FVector V2 = LODModel.VertexBuffers.PositionVertexBuffer.VertexPosition(I2);
|
||||
const FVector3f V0 = LODModel.VertexBuffers.PositionVertexBuffer.VertexPosition(I0);
|
||||
const FVector3f V1 = LODModel.VertexBuffers.PositionVertexBuffer.VertexPosition(I1);
|
||||
const FVector3f V2 = LODModel.VertexBuffers.PositionVertexBuffer.VertexPosition(I2);
|
||||
|
||||
const FVector TriangleNormal = ((V1 - V2) ^ (V0 - V2));
|
||||
const FVector3f TriangleNormal = ((V1 - V2) ^ (V0 - V2));
|
||||
const bool bDegenerateTriangle = TriangleNormal.SizeSquared() < SMALL_NUMBER;
|
||||
if (!bDegenerateTriangle)
|
||||
{
|
||||
@@ -199,14 +199,14 @@ void MeshRepresentation::SetupEmbreeScene(
|
||||
EmbreeScene.Geometry.IndexArray.Empty(NumFilteredIndices);
|
||||
EmbreeScene.Geometry.IndexArray.AddUninitialized(NumFilteredIndices);
|
||||
|
||||
FVector* EmbreeVertices = EmbreeScene.Geometry.VertexArray.GetData();
|
||||
FVector3f* EmbreeVertices = EmbreeScene.Geometry.VertexArray.GetData();
|
||||
uint32* EmbreeIndices = EmbreeScene.Geometry.IndexArray.GetData();
|
||||
EmbreeScene.Geometry.TriangleDescs.Empty(FilteredTriangles.Num());
|
||||
|
||||
for (int32 FilteredTriangleIndex = 0; FilteredTriangleIndex < FilteredTriangles.Num(); FilteredTriangleIndex++)
|
||||
{
|
||||
uint32 I0, I1, I2;
|
||||
FVector V0, V1, V2;
|
||||
FVector3f V0, V1, V2;
|
||||
|
||||
const int32 TriangleIndex = FilteredTriangles[FilteredTriangleIndex];
|
||||
if (SourceMeshData.IsValid())
|
||||
@@ -280,7 +280,7 @@ void MeshRepresentation::SetupEmbreeScene(
|
||||
RTCGeometry Geometry = rtcNewGeometry(EmbreeScene.EmbreeDevice, RTC_GEOMETRY_TYPE_TRIANGLE);
|
||||
EmbreeScene.Geometry.InternalGeometry = Geometry;
|
||||
|
||||
rtcSetSharedGeometryBuffer(Geometry, RTC_BUFFER_TYPE_VERTEX, 0, RTC_FORMAT_FLOAT3, EmbreeVertices, 0, sizeof(FVector), NumVertices);
|
||||
rtcSetSharedGeometryBuffer(Geometry, RTC_BUFFER_TYPE_VERTEX, 0, RTC_FORMAT_FLOAT3, EmbreeVertices, 0, sizeof(FVector3f), NumVertices);
|
||||
rtcSetSharedGeometryBuffer(Geometry, RTC_BUFFER_TYPE_INDEX, 0, RTC_FORMAT_UINT3, EmbreeIndices, 0, sizeof(uint32) * 3, FilteredTriangles.Num());
|
||||
|
||||
rtcSetGeometryUserData(Geometry, &EmbreeScene.Geometry);
|
||||
|
||||
@@ -67,7 +67,7 @@ struct FEmbreeTriangleDesc
|
||||
struct FEmbreeGeometry
|
||||
{
|
||||
TArray<uint32> IndexArray;
|
||||
TArray<FVector> VertexArray;
|
||||
TArray<FVector3f> VertexArray;
|
||||
TArray<FEmbreeTriangleDesc> TriangleDescs; // The material ID of each triangle.
|
||||
RTCGeometry InternalGeometry;
|
||||
};
|
||||
@@ -101,9 +101,9 @@ struct FEmbreeRay : public RTCRayHit
|
||||
hit.primID = RTC_INVALID_GEOMETRY_ID;
|
||||
}
|
||||
|
||||
FVector GetHitNormal() const
|
||||
FVector3f GetHitNormal() const
|
||||
{
|
||||
return FVector(-hit.Ng_x, -hit.Ng_y, -hit.Ng_z).GetSafeNormal();
|
||||
return FVector3f(-hit.Ng_x, -hit.Ng_y, -hit.Ng_z).GetSafeNormal();
|
||||
}
|
||||
|
||||
bool IsHitTwoSided() const
|
||||
|
||||
Reference in New Issue
Block a user