Explorar el Código

[ue4] Generated normals are now correctly being flipped at back-faces. Closes #1830.

Harald Csaszar hace 4 años
padre
commit
9032040503

+ 12 - 1
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;