Unreal Engine: interpolazione lineare con FMath::Lerp

25 Ottobre 2020

Corso Gamedev con Unreal Engine e C++ - Endless Runner

FMath::Lerp esegue un’interpolazione lineare tra due valori, l’Alpha varia da 0 a 1.

In Unreal Engine, FMath::Lerp è una funzione che consente di eseguire una “linear interpolation” (interpolazione lineare) tra due valori. L’interpolazione lineare è un metodo che calcola un valore intermedio tra due estremi basandosi su un fattore di interpolazione compreso tra 0 e 1.

La firma della funzione FMath::Lerp è la seguente:

template <typename T>
static FORCEINLINE T Lerp(const T& A, const T& B, float Alpha);

Dove:

  • A è il valore di partenza
  • B è il valore di destinazione
  • Alpha è il fattore di interpolazione che determina la quantità di “mescolamento” tra i due valori. Un valore di 0 restituisce il valore di partenza A, un valore di 1 restituisce il valore di destinazione B, mentre un valore compreso tra 0 e 1 restituisce un valore intermedio tra A e B in base al fattore di interpolazione.

Ad esempio, se si desidera eseguire l’interpolazione lineare tra due valori float StartValue e TargetValue con un fattore di interpolazione di 0.5, si può utilizzare la funzione FMath::Lerp nel seguente modo:

float Result = FMath::Lerp(StartValue, TargetValue, 0.5f);

Il risultato sarà un valore che rappresenta l’interpolazione lineare al 50% tra StartValue e TargetValue.

FMath::Lerp, Riferimenti

ModuleCore
Header/Engine/Source/Runtime/Core/Public/Math/UnrealMathUtility.h
Include#include “Math/UnrealMathUtility.h”

 

Sintassi

template<class T, class U>
static T Lerp
(
    const T & A,
    const T & B,
    const U & Alpha
)

Esempio

Script di esempio per la rotazione.

MioScript.h:

 private:
      float TargetYaw = 10.f; // 360.f
      float InitialYaw; // 270.f
      float CurrentYaw;

MioScript.cpp:

 // Called when the game starts
void UMioScript::BeginPlay()
{
      Super::BeginPlay();

      // HERE BEGIN CODE
      InitialYaw = GetOwner()->GetActorRotation().Yaw;
      CurrentYaw = InitialYaw;
      TargetYaw = InitialYaw + 90.f;
}


// Called every frame
void UMioScript::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
{
      Super::TickComponent(DeltaTime, TickType, ThisTickFunction);

      // HERE BEGIN CODE
      CurrentYaw = FMath::Lerp(CurrentYaw, TargetYaw, 0.02f);
      FRotator DoorRotation = GetOwner()->GetActorRotation();
      DoorRotation.Yaw = CurrentYaw;
      GetOwner()->SetActorRotation(DoorRotation);
}

Articoli recenti

Commenti recenti

  1. Massimiliano Ferretti su I Commenti

    Mi permetto di aggiungere una mia considerazione personale che ho riportato dall'utilizzo di C#. Personalmente mi piace commentare funzioni e…

  2. Personalmente ritengo che utilizzare git porti sempre dei vantaggi anche per lo sviluppo solo. Già solo la possibilità di fare…

  3. ciao, il link a discord non è piu valido, vorrei utilizzare il materiale che hai pubblicato tempo fa, come faccio?

Itamde è anche una scuola di programmazione online.

Itamde

Impara ciò che desideri, al tuo ritmo

0 commenti

Potrebbe interessarti anche…

Le novità di Itamde Studio – Ottobre 2025

Le novità di Itamde Studio – Ottobre 2025

Tra creazioni, libri e un po’ di magia artigianale L’autunno è arrivato e Itamde Studio prosegue la sua stagione creativa con la consueta energia poliedrica: tra scrittura, web, video, artigianato e nuovi progetti in vista dei mercatini di fine anno. Questo mese di...

Rimani aggiornato sulle ultime notizie e novità

Accedi ai contenuti riservati

Scopri il dietro le quinte dei nostri progetti, risorse esclusive e lo stato di avanzamento delle nostre creazioni in tempo reale.

Iscriviti alla newsletter

Ricevi le nostre notizie, le nostre riflessioni creative e le novità dell’atelier direttamente nella tua casella di posta elettronica.

Seguici

Unisciti alla nostra community sui social network per seguire i nostri progetti quotidiani e interagire con noi.