ALCCClippingVolume: volumen de recorte del 3DGS
Actor de volumen de recorte que recorta parte de una escena LCC con un volumen de caja o de esfera.
| Módulo | LCC4UnrealRuntime |
| Cabecera | Tools/LCCClippingVolume.h |
| Clase padre | AVolume |
| Nombre mostrado en el panel | LCC Clipping Volume |
#include "Tools/LCCClippingVolume.h"
Para los pasos de uso, una demostración y la descripción del panel de propiedades, consultar Edición de escenas - Volúmenes de recorte. Esta página solo enumera las interfaces.
Propiedades
| Propiedad | Tipo | Descripción |
|---|---|---|
bEnabled | bool | Si participa en el recorte |
Mode | EClipType | Inside recorta el interior del volumen, Outside recorta el exterior |
VolumeType | EClipVolumeType | Box para una caja, Sphere para una esfera |
Para el significado de los valores, consultar EClipType y EClipVolumeType.
Ninguna de las tres propiedades tiene Setter; se asignan directamente. Un cambio de propiedad o de transform en tiempo de ejecución surte efecto en el fotograma siguiente, sin necesidad de notificar manualmente al lado del renderizado.
Métodos
SetUpdateComponent / Refresh (obsoletos)
UFUNCTION(BlueprintCallable, Category = "XGrids", meta = (DeprecatedFunction))
void SetUpdateComponent(ULCCComponentBase* Component);
UFUNCTION(BlueprintCallable, Category = "XGrids", meta = (DeprecatedFunction))
void Refresh();
Ambos métodos están obsoletos e implementados como operaciones vacías; llamarlos no tiene efecto ni genera error.
Los datos de recorte se leen ahora en cada fotograma, así que los cambios de propiedades y de transform se reflejan en la imagen en el fotograma siguiente. El flujo anterior de vincular primero con SetUpdateComponent y llamar a Refresh() después de cada cambio ya no es necesario.
Las llamadas existentes se pueden eliminar sin más. En Blueprint estos dos nodos muestran un aviso de obsolescencia, y la sustitución consiste en eliminar el nodo.
Creación en tiempo de ejecución
#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;
// el tamaño de un AVolume se controla mediante el escalado
Volume->SetActorScale3D(Extent / 100.0f);
Component->AddClippingVolume(Volume);
return Volume;
}
Para alternar el efecto del recorte de forma temporal, no añadir ni eliminar elementos del array; cambiar bEnabled es más ligero:
for (ALCCClippingVolume* Volume : MyVolumes)
{
if (Volume)
{
Volume->bEnabled = bEnable;
}
}
Mover un volumen de recorte en tiempo de ejecución para una animación solo requiere cambiar el transform:
// desplazar el volumen de recorte a lo largo de la escena
FVector Loc = ClipVolume->GetActorLocation();
Loc.X += 200.0f * DeltaTime;
ClipVolume->SetActorLocation(Loc);
Para los nodos de Blueprint, consultar Edición de escenas - Métodos de Blueprint.
Notas
- El recorte solo afecta al renderizado, no a la colisión. Una zona recortada puede seguir siendo impactada por un rayo y sigue bloqueando a un personaje.
- Varios volúmenes de recorte que actúan a la vez se evalúan de forma independiente y sus efectos se acumulan. Mezclar
InsideyOutsideproduce fácilmente resultados inesperados. - El número de volúmenes de recorte activos a la vez está limitado, a 50 sin licencia; los excedentes no participan en el renderizado y se registra una advertencia. Los volúmenes de recorte y los planos de sección comparten esta cuota. Para las licencias, consultar Ediciones y licencias.
- Destruir un volumen de recorte solo provoca una actualización del renderizado y no elimina el elemento del array
ClippingVolumesdel Component, lo que deja un puntero obsoleto en el array (se omite automáticamente durante el renderizado). Para mantener el array limpio, llamar aRemoveClippingVolumeantes de destruirlo.
Véase también
- Edición de escenas: descripción completa de uso
- ALCCSectionPlane: seccionado con un plano
- ULCCComponentBase:
AddClippingVolumeyRemoveClippingVolume