ALCCClippingVolume: 3DGS-Clipping-Volumen
Clipping-Volumen-Actor, der einen Teil einer LCC-Szene mit einem Box- oder Kugel-Volumen wegschneidet.
| Modul | LCC4UnrealRuntime |
| Header | Tools/LCCClippingVolume.h |
| Basisklasse | AVolume |
| Angezeigter Name im Panel | LCC Clipping Volume |
#include "Tools/LCCClippingVolume.h"
Zu den Schritten der Verwendung, einer Vorführung und der Beschreibung des Eigenschaften-Panels siehe Szenenbearbeitung - Clipping-Volumen. Diese Seite nennt nur die Schnittstellen.
Eigenschaften
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
bEnabled | bool | Ob es am Beschneiden teilnimmt |
Mode | EClipType | Inside schneidet das Innere des Volumens weg, Outside schneidet das Äußere weg |
VolumeType | EClipVolumeType | Box für einen Kasten, Sphere für eine Kugel |
Zur Bedeutung der Werte siehe EClipType und EClipVolumeType.
Keine der drei Eigenschaften hat einen Setter; sie werden direkt zugewiesen. Eine Änderung einer Eigenschaft oder des Transforms zur Laufzeit wird im nächsten Frame wirksam, ohne die Rendering-Seite von Hand benachrichtigen zu müssen.
Methoden
SetUpdateComponent / Refresh (veraltet)
UFUNCTION(BlueprintCallable, Category = "XGrids", meta = (DeprecatedFunction))
void SetUpdateComponent(ULCCComponentBase* Component);
UFUNCTION(BlueprintCallable, Category = "XGrids", meta = (DeprecatedFunction))
void Refresh();
Beide Methoden sind veraltet und als No-Ops implementiert; ein Aufruf hat keine Wirkung und erzeugt keinen Fehler.
Die Clipping-Daten werden inzwischen jeden Frame gelesen, sodass Änderungen an Eigenschaften und Transform im nächsten Frame im Bild erscheinen. Der ältere Ablauf, zuerst mit SetUpdateComponent zu binden und nach jeder Änderung Refresh() aufzurufen, ist nicht mehr nötig.
Bestehende Aufrufe können einfach entfernt werden. In Blueprint zeigen diese beiden Nodes eine Veraltet-Warnung; der Ersatz besteht darin, den Node zu löschen.
Erzeugen zur Laufzeit
#include "Tools/LCCClippingVolume.h"
#include "LCCComponentBase.h"
ALCCClippingVolume* AMyTool::CreateBoxClip(
ULCCComponentBase* Component, const FVector& Location, const FVector& Extent)
{
ALCCClippingVolume* Volume = GetWorld()->SpawnActor<ALCCClippingVolume>(
ALCCClippingVolume::StaticClass(), Location, FRotator::ZeroRotator);
if (!Volume)
{
return nullptr;
}
Volume->VolumeType = EClipVolumeType::Box;
Volume->Mode = EClipType::Inside;
Volume->bEnabled = true;
// die Größe eines AVolume wird über die Skalierung gesteuert
Volume->SetActorScale3D(Extent / 100.0f);
Component->AddClippingVolume(Volume);
return Volume;
}
Um die Beschneidung zeitweise umzuschalten, keine Array-Elemente hinzufügen und entfernen; das Ändern von bEnabled ist leichter:
for (ALCCClippingVolume* Volume : MyVolumes)
{
if (Volume)
{
Volume->bEnabled = bEnable;
}
}
Das Bewegen eines Clipping-Volumens zur Laufzeit für eine Animation erfordert nur eine Änderung des Transforms:
// das Clipping-Volumen über die Szene führen
FVector Loc = ClipVolume->GetActorLocation();
Loc.X += 200.0f * DeltaTime;
ClipVolume->SetActorLocation(Loc);
Zu den Blueprint-Nodes siehe Szenenbearbeitung - Blueprint-Methoden.
Hinweise
- Das Beschneiden wirkt nur auf das Rendering, nicht auf die Kollision. Ein weggeschnittener Bereich kann weiterhin von einem Strahl getroffen werden und blockiert weiterhin einen Charakter.
- Mehrere gleichzeitig wirkende Clipping-Volumen werden unabhängig ausgewertet und ihre Wirkungen überlagern sich. Das Mischen von
InsideundOutsideführt leicht zu unerwarteten Ergebnissen. - Die Anzahl der gleichzeitig wirksamen Clipping-Volumen ist begrenzt, ohne Lizenz auf 50; die überzähligen nehmen nicht am Rendering teil und es wird eine Warnung protokolliert. Clipping-Volumen und Schnittebenen teilen sich dieses Kontingent. Zur Lizenzierung siehe Editionen und Lizenzierung.
- Das Zerstören eines Clipping-Volumens löst nur eine Aktualisierung des Renderings aus und entfernt das Element nicht aus dem Array
ClippingVolumesder Component, sodass ein veralteter Zeiger im Array bleibt (beim Rendering automatisch übersprungen). Um das Array sauber zu halten, vor dem ZerstörenRemoveClippingVolumeaufrufen.
Siehe auch
- Szenenbearbeitung: vollständige Beschreibung der Verwendung
- ALCCSectionPlane: Schneiden mit einer Ebene
- ULCCComponentBase:
AddClippingVolumeundRemoveClippingVolume