初始提交: UE5.3项目基础框架
This commit is contained in:
@ -0,0 +1,260 @@
|
||||
// Copyright 2020-2024 CesiumGS, Inc. and Contributors
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CesiumRasterOverlayLoadFailureDetails.h"
|
||||
#include "CesiumRasterOverlays/RasterOverlay.h"
|
||||
#include "Components/ActorComponent.h"
|
||||
#include "CoreMinimal.h"
|
||||
#include "Engine/Texture.h"
|
||||
#include "Engine/TextureDefines.h"
|
||||
#include <memory>
|
||||
#include "CesiumRasterOverlay.generated.h"
|
||||
|
||||
namespace Cesium3DTilesSelection {
|
||||
class Tileset;
|
||||
}
|
||||
|
||||
/**
|
||||
* The delegate for OnCesiumRasterOverlayLoadFailure, which is triggered when
|
||||
* the raster overlay encounters a load error.
|
||||
*/
|
||||
DECLARE_MULTICAST_DELEGATE_OneParam(
|
||||
FCesiumRasterOverlayLoadFailure,
|
||||
const FCesiumRasterOverlayLoadFailureDetails&);
|
||||
|
||||
CESIUMRUNTIME_API extern FCesiumRasterOverlayLoadFailure
|
||||
OnCesiumRasterOverlayLoadFailure;
|
||||
|
||||
/**
|
||||
* This struct is passed through the raster overlay options and is used when
|
||||
* `prepareRasterInLoadThread` is called.
|
||||
*/
|
||||
USTRUCT(BlueprintType)
|
||||
struct FRasterOverlayRendererOptions {
|
||||
GENERATED_BODY()
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cesium")
|
||||
TEnumAsByte<TextureFilter> filter = TextureFilter::TF_Default;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cesium")
|
||||
TEnumAsByte<TextureGroup> group = TextureGroup::TEXTUREGROUP_World;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cesium")
|
||||
bool useMipmaps = true;
|
||||
};
|
||||
|
||||
/**
|
||||
* A quadtree pyramid of 2D raster images meant to be draped over a Cesium 3D
|
||||
* Tileset. Raster overlays are commonly used for satellite imagery, street
|
||||
* maps, and more.
|
||||
*/
|
||||
UCLASS(Abstract)
|
||||
class CESIUMRUNTIME_API UCesiumRasterOverlay : public UActorComponent {
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
/**
|
||||
* The key to use to match this overlay to a material layer.
|
||||
*
|
||||
* When using Material Layers, any material layers inside a "Cesium" layer
|
||||
* stack with a name that matches this name will have their Texture,
|
||||
* TranslationScale, and TextureCoordinateIndex properties set automatically
|
||||
* so that a ML_CesiumOverlay layer function (or similar) will correctly
|
||||
* sample from this overlay.
|
||||
*/
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cesium")
|
||||
FString MaterialLayerKey = "Overlay0";
|
||||
|
||||
/**
|
||||
* Sets the texture filter and texture group of raster tile images. Depending
|
||||
* on the project settings, the default texture filter, TF_Default, should
|
||||
* have the best quality.
|
||||
*/
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cesium")
|
||||
FRasterOverlayRendererOptions rendererOptions;
|
||||
|
||||
// Sets default values for this component's properties
|
||||
UCesiumRasterOverlay();
|
||||
|
||||
/**
|
||||
* Displays this raster overlay on its owning Cesium 3D Tileset Actor, without
|
||||
* changing its activation state. It is usually better to call Activate
|
||||
* rather than this function, in order to ensure that the component is also
|
||||
* activated. Otherwise, if the Cesium3DTileset is reloaded for any reason,
|
||||
* this overlay will no longer be shown.
|
||||
*
|
||||
* If the overlay is already added or if this component's Owner is not a
|
||||
* Cesium 3D Tileset, this method does nothing.
|
||||
*/
|
||||
UFUNCTION(BlueprintCallable, Category = "Cesium")
|
||||
void AddToTileset();
|
||||
|
||||
/**
|
||||
* Stops displaying this raster overlay on its owning Cesium 3D Tileset Actor.
|
||||
* It is usually better to call Deactivate rather than this function, in order
|
||||
* to ensure that the component is also deactivated. Otherwise, if the
|
||||
* component remains active and the Cesium3DTileset is reloaded for any
|
||||
* reason, this overlay will reappear.
|
||||
*
|
||||
* If the overlay is not yet added or if this component's Owner is not a
|
||||
* Cesium 3D Tileset, this method does nothing.
|
||||
*/
|
||||
UFUNCTION(BlueprintCallable, Category = "Cesium")
|
||||
void RemoveFromTileset();
|
||||
|
||||
/**
|
||||
* Refreshes this overlay by removing from its owning Cesium 3D Tileset Actor
|
||||
* and re-adding it. If this component's Owner is not a Cesium 3D Tileset
|
||||
* Actor, this method does nothing. If this component is not active, the
|
||||
* overlay will be removed from the Cesium3DTileset if already present but not
|
||||
* re-added.
|
||||
*/
|
||||
UFUNCTION(BlueprintCallable, Category = "Cesium")
|
||||
void Refresh();
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category = "Cesium")
|
||||
double GetMaximumScreenSpaceError() const;
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category = "Cesium")
|
||||
void SetMaximumScreenSpaceError(double Value);
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category = "Cesium")
|
||||
int32 GetMaximumTextureSize() const;
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category = "Cesium")
|
||||
void SetMaximumTextureSize(int32 Value);
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category = "Cesium")
|
||||
int32 GetMaximumSimultaneousTileLoads() const;
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category = "Cesium")
|
||||
void SetMaximumSimultaneousTileLoads(int32 Value);
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category = "Cesium")
|
||||
int64 GetSubTileCacheBytes() const;
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category = "Cesium")
|
||||
void SetSubTileCacheBytes(int64 Value);
|
||||
|
||||
/**
|
||||
* Activates this raster overlay, which will display it on the Cesium3DTileset
|
||||
* to which the component is attached, if it isn't already displayed. The
|
||||
* overlay will continue to be shown on the tileset until it is deactivated.
|
||||
*
|
||||
* If the overlay is already displayed on the Cesium3DTileset, calling this
|
||||
* function will not cause it to pick up any new values for properties that
|
||||
* have been modified since it was added. To do that, call Refresh.
|
||||
*
|
||||
* If you created this overlay component via Blueprints, consider setting the
|
||||
* "Auto Activate" property to false on the "Add Component" node and calling
|
||||
* Activate after setting all the desired properties. This will avoid the need
|
||||
* to call Refresh, and will ensure the overlay is not loaded multiple times.
|
||||
*
|
||||
* @param bReset Whether the activation should happen even if ShouldActivate
|
||||
* returns false.
|
||||
*/
|
||||
virtual void Activate(bool bReset) override;
|
||||
|
||||
/**
|
||||
* Deactivates this raster overlay. This will stop displaying it on the
|
||||
* Cesium3DTileset to which the component is attached. The overlay will not be
|
||||
* shown again until the component is re-activated.
|
||||
*/
|
||||
virtual void Deactivate() override;
|
||||
|
||||
virtual void OnComponentDestroyed(bool bDestroyingHierarchy) override;
|
||||
virtual bool IsReadyForFinishDestroy() override;
|
||||
|
||||
protected:
|
||||
/**
|
||||
* The maximum number of pixels of error when rendering this overlay.
|
||||
* This is used to select an appropriate level-of-detail.
|
||||
*
|
||||
* When this property has its default value, 2.0, it means that raster overlay
|
||||
* images will be sized so that, when zoomed in closest, a single pixel in
|
||||
* the raster overlay maps to approximately 2x2 pixels on the screen.
|
||||
*/
|
||||
UPROPERTY(
|
||||
EditAnywhere,
|
||||
BlueprintReadWrite,
|
||||
BlueprintGetter = GetMaximumScreenSpaceError,
|
||||
BlueprintSetter = SetMaximumScreenSpaceError,
|
||||
Category = "Cesium")
|
||||
double MaximumScreenSpaceError = 2.0;
|
||||
|
||||
/**
|
||||
* The maximum texel size of raster overlay textures, in either
|
||||
* direction.
|
||||
*
|
||||
* Images created by this overlay will be no more than this number of texels
|
||||
* in either direction. This may result in reduced raster overlay detail in
|
||||
* some cases.
|
||||
*/
|
||||
UPROPERTY(
|
||||
EditAnywhere,
|
||||
BlueprintReadWrite,
|
||||
BlueprintGetter = GetMaximumTextureSize,
|
||||
BlueprintSetter = SetMaximumTextureSize,
|
||||
Category = "Cesium")
|
||||
int32 MaximumTextureSize = 2048;
|
||||
|
||||
/**
|
||||
* The maximum number of overlay tiles that may simultaneously be in
|
||||
* the process of loading.
|
||||
*/
|
||||
UPROPERTY(
|
||||
EditAnywhere,
|
||||
BlueprintReadWrite,
|
||||
BlueprintGetter = GetMaximumSimultaneousTileLoads,
|
||||
BlueprintSetter = SetMaximumSimultaneousTileLoads,
|
||||
Category = "Cesium")
|
||||
int32 MaximumSimultaneousTileLoads = 20;
|
||||
|
||||
/**
|
||||
* The maximum number of bytes to use to cache sub-tiles in memory.
|
||||
*
|
||||
* This is used by provider types that have an underlying tiling scheme that
|
||||
* may not align with the tiling scheme of the geometry tiles on which the
|
||||
* raster overlay tiles are draped. Because a single sub-tile may overlap
|
||||
* multiple geometry tiles, it is useful to cache loaded sub-tiles in memory
|
||||
* in case they're needed again soon. This property controls the maximum size
|
||||
* of that cache.
|
||||
*/
|
||||
UPROPERTY(
|
||||
EditAnywhere,
|
||||
BlueprintReadWrite,
|
||||
BlueprintGetter = GetSubTileCacheBytes,
|
||||
BlueprintSetter = SetSubTileCacheBytes,
|
||||
Category = "Cesium")
|
||||
int64 SubTileCacheBytes = 16 * 1024 * 1024;
|
||||
|
||||
/**
|
||||
* Whether or not to show credits of this raster overlay on screen.
|
||||
*/
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cesium")
|
||||
bool ShowCreditsOnScreen;
|
||||
|
||||
#if WITH_EDITOR
|
||||
// Called when properties are changed in the editor
|
||||
virtual void
|
||||
PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
|
||||
#endif
|
||||
|
||||
Cesium3DTilesSelection::Tileset* FindTileset() const;
|
||||
|
||||
virtual std::unique_ptr<CesiumRasterOverlays::RasterOverlay>
|
||||
CreateOverlay(const CesiumRasterOverlays::RasterOverlayOptions& options = {})
|
||||
PURE_VIRTUAL(UCesiumRasterOverlay::CreateOverlay, return nullptr;);
|
||||
|
||||
virtual void OnAdd(
|
||||
Cesium3DTilesSelection::Tileset* pTileset,
|
||||
CesiumRasterOverlays::RasterOverlay* pOverlay) {}
|
||||
virtual void OnRemove(
|
||||
Cesium3DTilesSelection::Tileset* pTileset,
|
||||
CesiumRasterOverlays::RasterOverlay* pOverlay) {}
|
||||
|
||||
private:
|
||||
CesiumRasterOverlays::RasterOverlay* _pOverlay;
|
||||
int32 _overlaysBeingDestroyed;
|
||||
};
|
||||
Reference in New Issue
Block a user