66 lines
2.6 KiB
C++
66 lines
2.6 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "FluidSurface.h"
|
|
#include "Importer.h"
|
|
#include "LightingMesh.h"
|
|
|
|
namespace Lightmass
|
|
{
|
|
|
|
/** Represents the fluid surface mesh to the static lighting system. */
|
|
static void GetStaticLightingVertex(
|
|
const FVector4f* QuadCorners,
|
|
const FVector4f* QuadUVCorners,
|
|
uint32 VertexIndex,
|
|
const FMatrix44f& LocalToWorld,
|
|
const FMatrix44f& LocalToWorldInverseTranspose,
|
|
FStaticLightingVertex& OutVertex
|
|
)
|
|
{
|
|
OutVertex.WorldPosition = LocalToWorld.TransformPosition(QuadCorners[VertexIndex]);
|
|
OutVertex.WorldTangentX = LocalToWorld.TransformVector(FVector4f(1, 0, 0, 1)).GetSafeNormal();
|
|
OutVertex.WorldTangentY = LocalToWorld.TransformVector(FVector4f(0, 1, 0, 1)).GetSafeNormal();
|
|
OutVertex.WorldTangentZ = LocalToWorldInverseTranspose.TransformVector(FVector4f(0, 0, 1, 1)).GetSafeNormal();
|
|
|
|
for(uint32 UVIndex = 0; UVIndex < 1; UVIndex++)
|
|
{
|
|
OutVertex.TextureCoordinates[UVIndex] = FVector2f(QuadUVCorners[VertexIndex].X, QuadUVCorners[VertexIndex].Y);
|
|
}
|
|
}
|
|
|
|
// FStaticLightingMesh interface.
|
|
void FFluidSurfaceStaticLightingMesh::GetTriangle(int32 TriangleIndex,FStaticLightingVertex& OutV0,FStaticLightingVertex& OutV1,FStaticLightingVertex& OutV2,int32& ElementIndex) const
|
|
{
|
|
GetStaticLightingVertex(QuadCorners,QuadUVCorners,QuadIndices[TriangleIndex * 3 + 0],LocalToWorld,LocalToWorldInverseTranspose,OutV0);
|
|
GetStaticLightingVertex(QuadCorners,QuadUVCorners,QuadIndices[TriangleIndex * 3 + 1],LocalToWorld,LocalToWorldInverseTranspose,OutV1);
|
|
GetStaticLightingVertex(QuadCorners,QuadUVCorners,QuadIndices[TriangleIndex * 3 + 2],LocalToWorld,LocalToWorldInverseTranspose,OutV2);
|
|
ElementIndex = 0;
|
|
}
|
|
|
|
void FFluidSurfaceStaticLightingMesh::GetTriangleIndices(int32 TriangleIndex,int32& OutI0,int32& OutI1,int32& OutI2) const
|
|
{
|
|
OutI0 = QuadIndices[TriangleIndex * 3 + 0];
|
|
OutI1 = QuadIndices[TriangleIndex * 3 + 1];
|
|
OutI2 = QuadIndices[TriangleIndex * 3 + 2];
|
|
}
|
|
|
|
void FFluidSurfaceStaticLightingMesh::Import( class FLightmassImporter& Importer )
|
|
{
|
|
// import super class
|
|
FStaticLightingMesh::Import( Importer );
|
|
Importer.ImportData((FFluidSurfaceStaticLightingMeshData*) this);
|
|
check(MaterialElements.Num() > 0);
|
|
}
|
|
|
|
void FFluidSurfaceStaticLightingTextureMapping::Import( class FLightmassImporter& Importer )
|
|
{
|
|
FStaticLightingTextureMapping::Import(Importer);
|
|
|
|
// Can't use the FStaticLightingMapping Import functionality for this
|
|
// as it only looks in the StaticMeshInstances map...
|
|
Mesh = Importer.GetFluidMeshInstances().FindRef(Guid);
|
|
check(Mesh);
|
|
}
|
|
|
|
} //namespace Lightmass
|