Agrarsense
Public Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
ADepthCamera Class Reference

#include <DepthCamera.h>

Inheritance diagram for ADepthCamera:
Inheritance graph
[legend]
Collaboration diagram for ADepthCamera:
Collaboration graph
[legend]

Public Member Functions

 ADepthCamera (const FObjectInitializer &ObjectInitializer)
 
void ChangeDepthCameraParameters (FDepthCameraParameters Parameters)
 
virtual void AddProcessingToFrameBuffer (TArray< FColor > &buffer) override
 
FDepthCameraParameters GetDepthCameraParameters ()
 
virtual ESensorTypes GetSensorType () const override
 
virtual FString GetParametersAsString () const override
 
- Public Member Functions inherited from ACamera
 ACamera (const FObjectInitializer &ObjectInitializer)
 
virtual void Init (FCameraBaseParameters parameters, bool SimulateSensor=true)
 
virtual ESensorTypes GetSensorType () const override
 
void ChangeCameraParameters (FCameraBaseParameters newParameters)
 
FCameraBaseParameters GetCameraParameters ()
 
void AddPostProcessingMaterial (const FString &Path, float Weight=1.0f)
 
void RemovePostProcessingMaterial (UMaterial *Material)
 
USceneCaptureComponent2D * GetCaptureComponent2D () const
 
UTextureRenderTarget2D * GetCaptureRenderTarget2D () const
 
void AddWidgetToWindow (UWidget *WidgetToAdd)
 
void RemoveWidgetFromWindow (UWidget *WidgetToRemove)
 
void SetShadowRendering (bool RenderShadows)
 
void DisableShowFlags ()
 
void SetTemporalAA (bool SetTemporal)
 
void ResizeCamera (int Width=1280, int Height=720)
 
void SaveCurrentFrameToDisk ()
 
int GetCameraWidth () const
 
int GetCameraHeight () const
 
void SetUseGimbal (bool UseGimbal)
 
virtual FString GetParametersAsString () const override
 
- Public Member Functions inherited from ASensor
 ASensor (const FObjectInitializer &ObjectInitializer)
 
FString ExportToJsonFile (const FString &FileName)
 
virtual ESensorTypes GetSensorType () const
 
FString GetSensorIdentifier () const
 
void SetSensorIdentifier (const FString newIdentifier)
 
FString GetSensorName () const
 
virtual FString GetParametersAsString () const
 
AVehicleIsAttachedToVehicle () const
 
void SetSensorName (const FString newName)
 
virtual FString GetTopicName ()
 
UTopic * GetROSTopic () const
 
void SetSimulateSensor (bool SimulateSensor)
 
bool CanSimulateSensor () const
 
ASensorModelGetSensorModel () const
 
void SetSensorModel (ASensorModel *NewSensorModel)
 
FORCEINLINE bool IsROSConnected () const
 
UROSIntegrationGameInstance * GetROSGameInstance () const
 
virtual FString GetActorID_Implementation () const override
 
virtual FString GetActorName_Implementation () const override
 
virtual FString GetActorInformation_Implementation () const override
 
virtual void SetActorName_Implementation (const FString &NewActorName) override
 
virtual void SetActorIDAndName_Implementation (const FString &NewActorName, const FString &NewID) override
 
void SetParentActorPtr (AActor *ParentActorPtr)
 
- Public Member Functions inherited from IActorInformation
FString GetActorID () const
 
FString GetActorName () const
 
FString GetActorInformation () const
 
void SetActorName (const FString &NewActorName)
 
void SetActorIDAndName (const FString &NewActorName, const FString &NewID)
 

Private Member Functions

void DepthInit (FDepthCameraParameters Parameters, bool SimulateSensor=true)
 
void Init (FCameraBaseParameters parameters, bool SimulateSensor=true) override
 
virtual void EndPlay (const EEndPlayReason::Type EndPlayReason) override
 
void SetupDepthMaterial (const bool UseGrayscale)
 

Private Attributes

FDepthCameraParameters DepthCameraParameters
 
TWeakObjectPtr< UMaterial > DepthEffectMaterialGrayscale
 
TWeakObjectPtr< UMaterial > DepthEffectMaterial
 

Friends

class USensorFactory
 

Additional Inherited Members

- Static Public Member Functions inherited from ASensor
static void HideComponentForAllCameras (UPrimitiveComponent *PrimitiveComponent)
 
static TMap< FString, FColor > GetSemanticColors ()
 
static TArray< TWeakObjectPtr< UPrimitiveComponent > > GetComponentsToHide ()
 
- Static Public Member Functions inherited from IActorInformation
static void SetAndValidateActorIDAndName (FString &ActorName, FString &ActorID, TWeakObjectPtr< AActor > Actor)
 
static bool DestroyActorByID (const FString &ID)
 
static AActor * GetActorByID (const FString &ID)
 
template<typename T >
static TArray< T * > GetActorsWithInterface ()
 
static void PrintAllIds ()
 
- Public Attributes inherited from ACamera
TEnumAsByte< ETextureRenderTargetFormat > TextureFormat = ETextureRenderTargetFormat::RTF_RGBA8
 
FCameraDelegate_OnWindowClosed OnCameraWindowClosed
 
FCameraDelegate_OnWindowResized OnCameraWindowResized
 
- Public Attributes inherited from ASensor
FSensorDestroy OnSensorDestroy
 
FString AttachedToComponent
 
FName AttachedToBone
 
- Protected Member Functions inherited from ACamera
virtual void BeginPlay () override
 
virtual void EndPlay (const EEndPlayReason::Type EndPlayReason) override
 
virtual void PreActorTick (UWorld *World, ELevelTick TickType, float DeltaSeconds)
 
virtual void EndOfFrame (UWorld *World, ELevelTick TickType, float DeltaSeconds)
 
virtual void EndOfFrameParellel (float DeltaTime)
 
virtual void AddProcessingToFrameBuffer (TArray< FColor > &buffer)
 
virtual void SendImageDataToROS (const TArray< FColor > &FrameBuffer, int32 Width, int32 Height)
 
void HidePrimitiveComponent (UPrimitiveComponent *PrimitiveComponent)
 
void SaveImageToDisk (const TArray< FColor > FrameBuffer, int32 Width, int32 Height)
 
void SaveCameraMetaDataToDisk (const FString &ImageName)
 
void CreateLogFile () override
 
- Protected Member Functions inherited from ASensor
virtual void BeginPlay () override
 
virtual void EndPlay (const EEndPlayReason::Type EndPlayReason) override
 
FString CreateTimeStampString () const
 
virtual void CreateROSTopic ()
 
virtual void DestroyROSTopic ()
 
virtual void CreateDataSavePath ()
 
bool IsLogFileCreated ()
 
virtual void CreateLogFile ()
 
void WriteToLogFile (const FString &Message)
 
- Static Protected Member Functions inherited from ASensor
template<typename InStructType >
static FString StructToString (const InStructType &InStruct)
 
- Protected Attributes inherited from ACamera
bool UseParallelLateTick = true
 
FDelegateHandle OnPreTickDelegate
 
FDelegateHandle OnPostTickDelegate
 
FString CameraName = "Camera "
 
FString FilePrefix = "Data/Camera_"
 
UTextureRenderTarget2D * CaptureRenderTarget = nullptr
 
USceneCaptureComponent2D * CaptureComponent2D = nullptr
 
UTexture2D * CaptureFrameTexture
 
TSharedPtr< FUnrealWindowUnrealWindow
 
FTickEntry TickEntry
 
TWeakObjectPtr< UMaterialInstanceDynamic > IceMaterialInstance
 
TWeakObjectPtr< UMaterial > PhysicLensDistortion
 
APIDDroneDronePtr = nullptr
 
FRotator SensorSetRotation
 
bool AllowGimbal = true
 
- Protected Attributes inherited from ASensor
UTopic * ROSTopic = nullptr
 
bool SendDataToROS = true
 
ULogFileLogFile = nullptr
 
AActor * ParentActor = nullptr
 
FString FileSavePath
 
UROSIntegrationGameInstance * ROSInstance = nullptr
 
- Static Protected Attributes inherited from ASensor
static FPrimitiveAdded OnPrimitiveAdded
 
static const FName NiagaraPointsInt = "User.PointCount"
 
static const FName NiagaraHitPoints = "User.HitPoints"
 
static const FName NiagaraHitColors = "User.HitColors"
 
static const FName NiagaraPointsFloat = "User.Test"
 

Detailed Description

Class for Depth Camera.

See also
ACamera

Definition at line 18 of file DepthCamera.h.

Constructor & Destructor Documentation

◆ ADepthCamera()

ADepthCamera::ADepthCamera ( const FObjectInitializer &  ObjectInitializer)

Definition at line 11 of file DepthCamera.cpp.

11 : Super(ObjectInitializer)
12{
13 // Ticked by Camera base class
14 PrimaryActorTick.bCanEverTick = false;
15}

Member Function Documentation

◆ AddProcessingToFrameBuffer()

void ADepthCamera::AddProcessingToFrameBuffer ( TArray< FColor > &  buffer)
overridevirtual

Add processing to the frame buffer.

Parameters
buffer- The frame buffer to process.

Reimplemented from ACamera.

Definition at line 57 of file DepthCamera.cpp.

58{
59 // TODO, can we avoid this altogether?
60
61 // Get the raw buffer
62 FColor* BufferPtr = buffer.GetData();
63
64 for (size_t i = 0; i < buffer.Num(); ++i)
65 {
66 // Convert the current FColor (sRGB 0-255) to FLinearColor (linear 0.0-1.0)
67 FLinearColor pixel = FLinearColor::FromSRGBColor(BufferPtr[i]);
68
69 // Process the pixel and convert it back to FColor (sRGB 0-255)
70 // This step applies gamma correction and ensures values are properly adjusted
71 BufferPtr[i] = FColor(
72 FMath::RoundToInt(pixel.R * 255.0f),
73 FMath::RoundToInt(pixel.G * 255.0f),
74 FMath::RoundToInt(pixel.B * 255.0f));
75 }
76}

◆ ChangeDepthCameraParameters()

void ADepthCamera::ChangeDepthCameraParameters ( FDepthCameraParameters  Parameters)

Change the Depth camera parameters.

Parameters
Parameters- The new Depth camera parameters.

Definition at line 50 of file DepthCamera.cpp.

51{
52 DepthCameraParameters = Parameters;
55}
void ChangeCameraParameters(FCameraBaseParameters newParameters)
Definition: Camera.cpp:55
void SetupDepthMaterial(const bool UseGrayscale)
Definition: DepthCamera.cpp:78
FDepthCameraParameters DepthCameraParameters
Definition: DepthCamera.h:95
FCameraBaseParameters CameraParameters

References FDepthCameraParameters::CameraParameters, ACamera::ChangeCameraParameters(), FDepthCameraParameters::ConvertToGrayscale, DepthCameraParameters, and SetupDepthMaterial().

◆ DepthInit()

void ADepthCamera::DepthInit ( FDepthCameraParameters  Parameters,
bool  SimulateSensor = true 
)
private

Initializes a new Depth Camera sensor with specified Depth camera parameters.

Parameters
parametersA FDepthCameraParameters struct.
SimulateSensorA boolean flag to indicate whether the sensor should be simulated (default is true).

Definition at line 17 of file DepthCamera.cpp.

18{
19 DepthCameraParameters = Parameters;
21}
void Init(FCameraBaseParameters parameters, bool SimulateSensor=true) override
Definition: DepthCamera.cpp:23

References FDepthCameraParameters::CameraParameters, DepthCameraParameters, and Init().

◆ EndPlay()

void ADepthCamera::EndPlay ( const EEndPlayReason::Type  EndPlayReason)
overrideprivatevirtual

Called when the camera's play ends.

Parameters
EndPlayReason- The reason for the end of play.

Reimplemented from ACamera.

Definition at line 42 of file DepthCamera.cpp.

43{
44 Super::EndPlay(EndPlayReason);
45
47 DepthEffectMaterial.Reset();
48}
TWeakObjectPtr< UMaterial > DepthEffectMaterialGrayscale
Definition: DepthCamera.h:97
TWeakObjectPtr< UMaterial > DepthEffectMaterial
Definition: DepthCamera.h:99

References DepthEffectMaterial, and DepthEffectMaterialGrayscale.

◆ GetDepthCameraParameters()

FDepthCameraParameters ADepthCamera::GetDepthCameraParameters ( )
inline

Get the current Depth camera parameters.

Returns
FDepthCameraParameters struct.

Definition at line 44 of file DepthCamera.h.

45 {
47 }

Referenced by USimulatorJsonExporter::ExportSensorToJSON().

◆ GetParametersAsString()

virtual FString ADepthCamera::GetParametersAsString ( ) const
inlineoverridevirtual

Get this sensor parameters struct fields as one string.

Reimplemented from ACamera.

Definition at line 61 of file DepthCamera.h.

62 {
64 }
static FString StructToString(const InStructType &InStruct)
Definition: Sensor.h:325

◆ GetSensorType()

virtual ESensorTypes ADepthCamera::GetSensorType ( ) const
inlineoverridevirtual

Get type of the sensor

Returns
Sensor's type

Reimplemented from ACamera.

Definition at line 53 of file DepthCamera.h.

54 {
56 }

References DepthCamera.

◆ Init()

void ADepthCamera::Init ( FCameraBaseParameters  parameters,
bool  SimulateSensor = true 
)
overrideprivatevirtual

Initializes a new Depth Camera sensor with specified parameters, overriding the base class method.

Parameters
parametersA FCameraBaseParameters struct.
SimulateSensorA boolean flag to indicate whether the sensor should be simulated (default is true).

Reimplemented from ACamera.

Definition at line 23 of file DepthCamera.cpp.

24{
25 // Set directory and camera name, defined in Camera.h
26 CameraName = "DepthCamera ";
27 FilePrefix = "Data/DepthCamera_";
28
29 // Setup Depth material
31
32 // Call Camera base class Init
33 Super::Init(parameters, SimulateSensor);
34
35 // This camera doesn't need to render shadows
36 SetShadowRendering(false);
37
38 // Or many other advanced show flags.
40}
FString FilePrefix
Definition: Camera.h:276
void SetShadowRendering(bool RenderShadows)
Definition: Camera.cpp:810
FString CameraName
Definition: Camera.h:274
void DisableShowFlags()
Definition: Camera.cpp:842

References ACamera::CameraName, FDepthCameraParameters::ConvertToGrayscale, DepthCameraParameters, ACamera::DisableShowFlags(), ACamera::FilePrefix, ACamera::SetShadowRendering(), and SetupDepthMaterial().

Referenced by DepthInit().

◆ SetupDepthMaterial()

void ADepthCamera::SetupDepthMaterial ( const bool  UseGrayscale)
private

Setup which post processing material to use.

Definition at line 78 of file DepthCamera.cpp.

79{
80 // Get SceneCaptureComponent2D from the base Camera class
81 USceneCaptureComponent2D* SceneCaptureComponent = GetCaptureComponent2D();
82
83 if (SceneCaptureComponent)
84 {
85 // Determine which post-processing material to apply based on whether grayscale is used
86 if (UseGrayscale)
87 {
88 // Load and apply the grayscale material if it hasn't been loaded already
89 if (!DepthEffectMaterialGrayscale.IsValid())
90 {
91
92 FString Path;
93#if PLATFORM_LINUX
94 Path = "/Game/Agrarsense/Materials/PostProcessingMaterials/DepthEffectMaterialGrayscale_Alt.DepthEffectMaterialGrayscale_Alt";
95#else
96 Path = "/Game/Agrarsense/Materials/PostProcessingMaterials/DepthEffectMaterialGrayscale.DepthEffectMaterialGrayscale";
97#endif
98 DepthEffectMaterialGrayscale = Cast<UMaterial>(StaticLoadObject(UMaterial::StaticClass(), nullptr, *Path));
99 AddPostProcessingMaterial(Path, 1.0f);
100 }
101
102 // Remove the non-grayscale material if it's currently applied
103 if (DepthEffectMaterial.IsValid())
104 {
106 DepthEffectMaterial.Reset();
107 }
108 }
109 else
110 {
111 // Load and apply the non-grayscale material if it hasn't been loaded already
112 if (!DepthEffectMaterial.IsValid())
113 {
114 FString Path;
115#if PLATFORM_LINUX
116 Path = "/Game/Agrarsense/Materials/PostProcessingMaterials/DepthEffectMaterial_Alt.DepthEffectMaterial_Alt";
117#else
118 Path = "/Game/Agrarsense/Materials/PostProcessingMaterials/DepthEffectMaterial.DepthEffectMaterial";
119#endif
120 DepthEffectMaterial = Cast<UMaterial>(StaticLoadObject(UMaterial::StaticClass(), nullptr, *Path));
121 AddPostProcessingMaterial(Path, 1.0f);
122 }
123
124 // Remove the grayscale material if it's currently applied
125 if (DepthEffectMaterialGrayscale.IsValid())
126 {
129 }
130 }
131 }
132}
void AddPostProcessingMaterial(const FString &Path, float Weight=1.0f)
Definition: Camera.cpp:60
void RemovePostProcessingMaterial(UMaterial *Material)
Definition: Camera.cpp:76
USceneCaptureComponent2D * GetCaptureComponent2D() const
Definition: Camera.h:114

References ACamera::AddPostProcessingMaterial(), DepthEffectMaterial, DepthEffectMaterialGrayscale, ACamera::GetCaptureComponent2D(), and ACamera::RemovePostProcessingMaterial().

Referenced by ChangeDepthCameraParameters(), and Init().

Friends And Related Function Documentation

◆ USensorFactory

friend class USensorFactory
friend

Definition at line 68 of file DepthCamera.h.

Member Data Documentation

◆ DepthCameraParameters

FDepthCameraParameters ADepthCamera::DepthCameraParameters
private

Definition at line 95 of file DepthCamera.h.

Referenced by ChangeDepthCameraParameters(), DepthInit(), and Init().

◆ DepthEffectMaterial

TWeakObjectPtr<UMaterial> ADepthCamera::DepthEffectMaterial
private

Definition at line 99 of file DepthCamera.h.

Referenced by EndPlay(), and SetupDepthMaterial().

◆ DepthEffectMaterialGrayscale

TWeakObjectPtr<UMaterial> ADepthCamera::DepthEffectMaterialGrayscale
private

Definition at line 97 of file DepthCamera.h.

Referenced by EndPlay(), and SetupDepthMaterial().


The documentation for this class was generated from the following files: