From 9032040503be0ed110b7b0c8e6f4f664796caea4 Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Thu, 14 Jan 2021 20:42:43 +0100 Subject: [PATCH] [ue4] Generated normals are now correctly being flipped at back-faces. Closes #1830. --- .../Private/SpineSkeletonRendererComponent.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonRendererComponent.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonRendererComponent.cpp index 0cb79597a..395869350 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonRendererComponent.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonRendererComponent.cpp @@ -332,14 +332,25 @@ void USpineSkeletonRendererComponent::UpdateMesh(Skeleton* Skeleton) { colors.Add(FColor(r, g, b, a)); darkColors.Add(FVector(dr, dg, db)); vertices.Add(FVector(verticesPtr[j], depthOffset, verticesPtr[j + 1])); - normals.Add(FVector(0, -1, 0)); uvs.Add(FVector2D(attachmentUvs[j], attachmentUvs[j + 1])); } + int firstIndex = indices.Num(); for (int j = 0; j < numIndices; j++) { indices.Add(idx + attachmentIndices[j]); } + FVector normal = FVector(0, -1, 0); + if (numVertices > 2 && + FVector::CrossProduct( + vertices[indices[firstIndex + 2]] - vertices[indices[firstIndex]], + vertices[indices[firstIndex + 1]] - vertices[indices[firstIndex]]).Y > 0.f) { + normal.Y = 1; + } + for (int j = 0; j < numVertices; j++) { + normals.Add(normal); + } + idx += numVertices; depthOffset += this->DepthOffset;