Procedural ocean mesh
Procedural ocean mesh
This commit is contained in:
parent
f6ecbc44e5
commit
0e47a235a3
BIN
Content/Core/BP_TestGameMode.uasset
(Stored with Git LFS)
BIN
Content/Core/BP_TestGameMode.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
Content/Environment/BP_ProcOcean.uasset
(Stored with Git LFS)
Normal file
BIN
Content/Environment/BP_ProcOcean.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Content/Environment/BP_TestOcean.uasset
(Stored with Git LFS)
BIN
Content/Environment/BP_TestOcean.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
Content/Maps/ShipTest.umap
(Stored with Git LFS)
BIN
Content/Maps/ShipTest.umap
(Stored with Git LFS)
Binary file not shown.
BIN
Content/Maps/ShipTest_BuiltData.uasset
(Stored with Git LFS)
BIN
Content/Maps/ShipTest_BuiltData.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
Content/Ships/BP_TestCube.uasset
(Stored with Git LFS)
BIN
Content/Ships/BP_TestCube.uasset
(Stored with Git LFS)
Binary file not shown.
@ -3,13 +3,17 @@
|
||||
|
||||
#include "Ocean.h"
|
||||
|
||||
#include "DrawDebugHelpers.h"
|
||||
|
||||
// Sets default values
|
||||
AOcean::AOcean()
|
||||
{
|
||||
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
|
||||
PrimaryActorTick.bCanEverTick = true;
|
||||
|
||||
OceanMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("OceanMesh"));
|
||||
XSize = YSize = 10.0f;
|
||||
|
||||
OceanMesh = CreateDefaultSubobject<UProceduralMeshComponent>(TEXT("OceanMesh"));
|
||||
OceanMesh->SetupAttachment(RootComponent);
|
||||
|
||||
OceanMesh->SetCollisionEnabled(ECollisionEnabled::NoCollision);
|
||||
@ -29,7 +33,8 @@ float AOcean::GetOceanHeight()
|
||||
void AOcean::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
|
||||
|
||||
GenerateMesh();
|
||||
}
|
||||
|
||||
// Called every frame
|
||||
@ -37,5 +42,44 @@ void AOcean::Tick(float DeltaTime)
|
||||
{
|
||||
Super::Tick(DeltaTime);
|
||||
|
||||
for (auto Vertex : Vertices)
|
||||
{
|
||||
DrawDebugSphere(GetWorld(), Vertex, 2.0f, 6, FColor::Red, false, 0.0f, -1, 1.0);
|
||||
}
|
||||
}
|
||||
|
||||
void AOcean::GenerateMesh()
|
||||
{
|
||||
Vertices = TArray<FVector>();
|
||||
Vertices.SetNum((XSize + 1) * (YSize + 1));
|
||||
UV0 = TArray<FVector2D>();
|
||||
UV0.SetNum(Vertices.Num());
|
||||
Tangents = TArray<FProcMeshTangent>();
|
||||
Tangents.SetNum(Vertices.Num());
|
||||
FProcMeshTangent Tangent;
|
||||
for(uint32 i = 0, y = 0; y <= YSize; y++)
|
||||
{
|
||||
for(uint32 x = 0; x <= XSize; x++, i++)
|
||||
{
|
||||
Vertices[i] = FVector(x * 100.0f, y * 100.0f, 0.0f);
|
||||
UV0[i] = FVector2D((float)x/XSize, (float)y/YSize);
|
||||
Tangents[i] = Tangent;
|
||||
}
|
||||
}
|
||||
|
||||
Triangles = TArray<int32>();
|
||||
Triangles.SetNum(XSize * YSize * 6);
|
||||
for(uint32 ti = 0, vi = 0, y = 0; y < YSize; y++, vi++)
|
||||
{
|
||||
for(uint32 x = 0; x < XSize; x++, ti += 6, vi++)
|
||||
{
|
||||
Triangles[ti] = vi;
|
||||
Triangles[ti + 3] = Triangles[ti + 2] = vi + 1;
|
||||
Triangles[ti + 4] = Triangles[ti + 1] = vi + XSize + 1;
|
||||
Triangles[ti + 5] = vi + XSize + 2;
|
||||
}
|
||||
}
|
||||
|
||||
OceanMesh->CreateMeshSection(1, Vertices, Triangles, Normals, UV0, VertexColors, Tangents, false);
|
||||
}
|
||||
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "GameFramework/Actor.h"
|
||||
#include "ProceduralMeshComponent.h"
|
||||
#include "Ocean.generated.h"
|
||||
|
||||
UCLASS()
|
||||
@ -18,14 +19,42 @@ public:
|
||||
float GetOceanHeight();
|
||||
|
||||
protected:
|
||||
UPROPERTY(EditDefaultsOnly, Category="Components")
|
||||
UStaticMeshComponent* OceanMesh;
|
||||
UPROPERTY(BlueprintReadOnly, Category="Components")
|
||||
UProceduralMeshComponent* OceanMesh;
|
||||
|
||||
// XSize and YSize are the number of tiles in the mesh
|
||||
UPROPERTY(EditDefaultsOnly, Category="Properties")
|
||||
uint32 XSize;
|
||||
|
||||
UPROPERTY(EditDefaultsOnly, Category="Properties")
|
||||
uint32 YSize;
|
||||
|
||||
UPROPERTY()
|
||||
TArray<FVector> Vertices;
|
||||
|
||||
UPROPERTY()
|
||||
TArray<int32> Triangles;
|
||||
|
||||
UPROPERTY()
|
||||
TArray<FVector> Normals;
|
||||
|
||||
UPROPERTY()
|
||||
TArray<FVector2D> UV0;
|
||||
|
||||
UPROPERTY()
|
||||
TArray<FColor> VertexColors;
|
||||
|
||||
UPROPERTY()
|
||||
TArray<FProcMeshTangent> Tangents;
|
||||
|
||||
// Called when the game starts or when spawned
|
||||
virtual void BeginPlay() override;
|
||||
|
||||
|
||||
public:
|
||||
// Called every frame
|
||||
virtual void Tick(float DeltaTime) override;
|
||||
|
||||
private:
|
||||
void GenerateMesh();
|
||||
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user