Advertisement
Guest User

flat shading ue4

a guest
Oct 1st, 2015
474
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.30 KB | None | 0 0
  1. if (smooth)
  2. {
  3.     UKismetProceduralMeshLibrary::CalculateTangentsForMesh(data.VertexArray, data.IndexArray, data.UVArray, data.NormalArray, data.TangentArray);
  4. }
  5. else
  6. {
  7.     for (int32 Index = 0; Index < IndexCount; Index += 3)
  8.     {
  9.         const FVector Edge21 = data.VertexArray[data.IndexArray[Index + 1]] - data.VertexArray[data.IndexArray[Index + 2]];
  10.         const FVector Edge20 = data.VertexArray[data.IndexArray[Index + 0]] - data.VertexArray[data.IndexArray[Index + 2]];
  11.         FVector TriNormal = (Edge21 ^ Edge20).GetSafeNormal();
  12.  
  13.         FVector FaceTangentX = Edge20.GetSafeNormal();
  14.         FVector FaceTangentY = (FaceTangentX ^ TriNormal).GetSafeNormal();
  15.         FVector FaceTangentZ = TriNormal;
  16.  
  17.         // Use Gram-Schmidt orthogonalization to make sure X is orth with Z
  18.         FaceTangentX -= FaceTangentZ * (FaceTangentZ | FaceTangentX);
  19.         FaceTangentX.Normalize();
  20.  
  21.         // See if we need to flip TangentY when generating from cross product
  22.         const bool bFlipBitangent = ((FaceTangentZ ^ FaceTangentX) | FaceTangentY) < 0.f;
  23.         TriNormal.Normalize();
  24.         FaceTangentX.Normalize();
  25.         FProcMeshTangent tangent = FProcMeshTangent(FaceTangentX, bFlipBitangent);
  26.         for (int32 i = 0; i < 3; i++)
  27.         {
  28.             data.NormalArray[data.IndexArray[Index + i]] = TriNormal;
  29.             data.TangentArray[data.IndexArray[Index + i]] = tangent;
  30.         }
  31.                            
  32.     }
  33. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement