427 lines
5.7 KiB
C++
427 lines
5.7 KiB
C++
#include "VoxelMesh.h"
|
|
|
|
const FVoxelMeshData FVoxelMeshData::CubeTopFace =
|
|
{
|
|
// Vertices
|
|
{
|
|
{ 0.0f, 0.0f, 100.0f },
|
|
{ 100.0f, 0.0f, 100.0f },
|
|
{ 0.0f, 100.0f, 100.0f },
|
|
{ 100.0f, 100.0f, 100.0f },
|
|
},
|
|
|
|
// Triangles
|
|
{
|
|
2, 1, 0,
|
|
2, 3, 1,
|
|
},
|
|
|
|
// Normals
|
|
{
|
|
{ 0.0f, 0.0f, 1.0f },
|
|
{ 0.0f, 0.0f, 1.0f },
|
|
{ 0.0f, 0.0f, 1.0f },
|
|
{ 0.0f, 0.0f, 1.0f },
|
|
},
|
|
|
|
// UV0
|
|
{
|
|
{ 0.0f, 0.0f },
|
|
{ 1.0f, 0.0f },
|
|
{ 0.0f, 1.0f },
|
|
{ 1.0f, 1.0f },
|
|
},
|
|
|
|
// UV1
|
|
{
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
},
|
|
|
|
// UV2
|
|
{
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
},
|
|
|
|
// UV3
|
|
{
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
},
|
|
|
|
// VertexColors
|
|
{
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
},
|
|
};
|
|
|
|
const FVoxelMeshData FVoxelMeshData::CubeBottomFace =
|
|
{
|
|
// Vertices
|
|
{
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 100.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 100.0f, 0.0f },
|
|
{ 100.0f, 100.0f, 0.0f },
|
|
},
|
|
|
|
// Triangles
|
|
{
|
|
0, 1, 2,
|
|
1, 3, 2,
|
|
},
|
|
|
|
// Normals
|
|
{
|
|
{ 0.0f, 0.0f, -1.0f },
|
|
{ 0.0f, 0.0f, -1.0f },
|
|
{ 0.0f, 0.0f, -1.0f },
|
|
{ 0.0f, 0.0f, -1.0f },
|
|
},
|
|
|
|
// UV0
|
|
{
|
|
{ 0.0f, 0.0f },
|
|
{ 1.0f, 0.0f },
|
|
{ 0.0f, 1.0f },
|
|
{ 1.0f, 1.0f },
|
|
},
|
|
|
|
// UV1
|
|
{
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
},
|
|
|
|
// UV2
|
|
{
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
},
|
|
|
|
// UV3
|
|
{
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
},
|
|
|
|
// VertexColors
|
|
{
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
},
|
|
};
|
|
|
|
const FVoxelMeshData FVoxelMeshData::CubeFrontFace =
|
|
{
|
|
// Vertices
|
|
{
|
|
{ 100.0f, 0.0f, 0.0f },
|
|
{ 100.0f, 0.0f, 100.0f },
|
|
{ 100.0f, 100.0f, 0.0f },
|
|
{ 100.0f, 100.0f, 100.0f },
|
|
},
|
|
|
|
// Triangles
|
|
{
|
|
0, 1, 2,
|
|
1, 3, 2,
|
|
},
|
|
|
|
// Normals
|
|
{
|
|
{ 1.0f, 0.0f, 0.0f },
|
|
{ 1.0f, 0.0f, 0.0f },
|
|
{ 1.0f, 0.0f, 0.0f },
|
|
{ 1.0f, 0.0f, 0.0f },
|
|
},
|
|
|
|
// UV0
|
|
{
|
|
{ 0.0f, 1.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 1.0f, 1.0f },
|
|
{ 1.0f, 0.0f },
|
|
},
|
|
|
|
// UV1
|
|
{
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
},
|
|
|
|
// UV2
|
|
{
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
},
|
|
|
|
// UV3
|
|
{
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
},
|
|
|
|
// VertexColors
|
|
{
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
},
|
|
};
|
|
|
|
const FVoxelMeshData FVoxelMeshData::CubeBackFace =
|
|
{
|
|
// Vertices
|
|
{
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 100.0f },
|
|
{ 0.0f, 100.0f, 0.0f },
|
|
{ 0.0f, 100.0f, 100.0f },
|
|
},
|
|
|
|
// Triangles
|
|
{
|
|
2, 1, 0,
|
|
2, 3, 1,
|
|
},
|
|
|
|
// Normals
|
|
{
|
|
{ -1.0f, 0.0f, 0.0f },
|
|
{ -1.0f, 0.0f, 0.0f },
|
|
{ -1.0f, 0.0f, 0.0f },
|
|
{ -1.0f, 0.0f, 0.0f },
|
|
},
|
|
|
|
// UV0
|
|
{
|
|
{ 1.0f, 1.0f },
|
|
{ 1.0f, 0.0f },
|
|
{ 0.0f, 1.0f },
|
|
{ 0.0f, 0.0f },
|
|
},
|
|
|
|
// UV1
|
|
{
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
},
|
|
|
|
// UV2
|
|
{
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
},
|
|
|
|
// UV3
|
|
{
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
},
|
|
|
|
// VertexColors
|
|
{
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
},
|
|
};
|
|
|
|
const FVoxelMeshData FVoxelMeshData::CubeLeftFace =
|
|
{
|
|
// Vertices
|
|
{
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 100.0f },
|
|
{ 100.0f, 0.0f, 0.0f },
|
|
{ 100.0f, 0.0f, 100.0f },
|
|
},
|
|
|
|
// Triangles
|
|
{
|
|
0, 1, 2,
|
|
1, 3, 2,
|
|
},
|
|
|
|
// Normals
|
|
{
|
|
{ 0.0f, -1.0f, 0.0f },
|
|
{ 0.0f, -1.0f, 0.0f },
|
|
{ 0.0f, -1.0f, 0.0f },
|
|
{ 0.0f, -1.0f, 0.0f },
|
|
},
|
|
|
|
// UV0
|
|
{
|
|
{ 0.0f, 1.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 1.0f, 1.0f },
|
|
{ 1.0f, 0.0f },
|
|
},
|
|
|
|
// UV1
|
|
{
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
},
|
|
|
|
// UV2
|
|
{
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
},
|
|
|
|
// UV3
|
|
{
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
},
|
|
|
|
// VertexColors
|
|
{
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
},
|
|
};
|
|
|
|
const FVoxelMeshData FVoxelMeshData::CubeRightFace =
|
|
{
|
|
// Vertices
|
|
{
|
|
{ 0.0f, 100.0f, 0.0f },
|
|
{ 0.0f, 100.0f, 100.0f },
|
|
{ 100.0f, 100.0f, 0.0f },
|
|
{ 100.0f, 100.0f, 100.0f },
|
|
},
|
|
|
|
// Triangles
|
|
{
|
|
2, 1, 0,
|
|
2, 3, 1,
|
|
},
|
|
|
|
// Normals
|
|
{
|
|
{ 0.0f, 1.0f, 0.0f },
|
|
{ 0.0f, 1.0f, 0.0f },
|
|
{ 0.0f, 1.0f, 0.0f },
|
|
{ 0.0f, 1.0f, 0.0f },
|
|
},
|
|
|
|
// UV0
|
|
{
|
|
{ 1.0f, 1.0f },
|
|
{ 1.0f, 0.0f },
|
|
{ 0.0f, 1.0f },
|
|
{ 0.0f, 0.0f },
|
|
},
|
|
|
|
// UV1
|
|
{
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
},
|
|
|
|
// UV2
|
|
{
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
},
|
|
|
|
// UV3
|
|
{
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f },
|
|
},
|
|
|
|
// VertexColors
|
|
{
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
},
|
|
};
|
|
|
|
void FVoxelMeshData::Reset()
|
|
{
|
|
Vertices.Reset();
|
|
Triangles.Reset();
|
|
Normals.Reset();
|
|
UV0.Reset();
|
|
UV1.Reset();
|
|
UV2.Reset();
|
|
UV3.Reset();
|
|
VertexColors.Reset();
|
|
}
|
|
|
|
void FVoxelMeshData::Append(const FVoxelMeshData & Source)
|
|
{
|
|
Vertices.Append(Source.Vertices);
|
|
Triangles.Append(Source.Triangles);
|
|
Normals.Append(Source.Normals);
|
|
UV0.Append(Source.UV0);
|
|
UV1.Append(Source.UV1);
|
|
UV2.Append(Source.UV2);
|
|
UV3.Append(Source.UV3);
|
|
VertexColors.Append(Source.VertexColors);
|
|
|
|
for (int32 i = -Source.Triangles.Num(); i < 0; ++i)
|
|
Triangles[Triangles.Num() + i] += Vertices.Num() - Source.Vertices.Num();
|
|
}
|
|
|
|
void FVoxelMeshData::Append(const FVoxelMeshData & Source, const FVector & LocationOffset)
|
|
{
|
|
Append(Source);
|
|
|
|
for (int32 i = -Source.Vertices.Num(); i < 0; ++i)
|
|
Vertices[Vertices.Num() + i] += LocationOffset;
|
|
}
|