Files
UnrealEngineUWP/Engine/Source/Editor/GeometryCacheEd/Private/GeometryCacheThumbnailScene.cpp
Jurre DeBaare 33f862bc49 GeomCache/ABCImporter
ADDED thumbnail renderer for GeometryCache
ADDED BP creation from GeometryCache asset
ADDED de-registering of handlers during GeomCacheModule shutdown
FIXED bug with importing Materials, though recreating a clean scene in Maya also fixed it (bad Maya history)

[CL 2682433 by Jurre DeBaare in Main branch]
2015-09-07 09:32:51 -04:00

69 lines
2.6 KiB
C++

// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
#include "GeometryCacheEdModulePublicPCH.h"
#include "GeometryCacheThumbnailRenderer.h"
#include "GeometryCacheThumbnailScene.h"
#include "GeometryCacheActor.h"
#include "GeometryCacheComponent.h"
FGeometryCacheThumbnailScene::FGeometryCacheThumbnailScene()
{
bForceAllUsedMipsResident = false;
// Create preview actor
// checked
FActorSpawnParameters SpawnInfo;
SpawnInfo.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
SpawnInfo.bNoFail = true;
SpawnInfo.ObjectFlags = RF_Transient;
PreviewActor = GetWorld()->SpawnActor<AGeometryCacheActor>(SpawnInfo);
PreviewActor->GetGeometryCacheComponent()->SetMobility(EComponentMobility::Movable);
PreviewActor->SetActorEnableCollision(false);
}
void FGeometryCacheThumbnailScene::SetGeometryCache(UGeometryCache* GeometryCache)
{
PreviewActor->GetGeometryCacheComponent()->SetGeometryCache(GeometryCache);
if (GeometryCache)
{
FTransform MeshTransform = FTransform::Identity;
PreviewActor->SetActorLocation(FVector(0, 0, 0), false);
PreviewActor->GetGeometryCacheComponent()->UpdateBounds();
// Center the mesh at the world origin then offset to put it on top of the plane
const float BoundsZOffset = GetBoundsZOffset(PreviewActor->GetGeometryCacheComponent()->Bounds);
PreviewActor->SetActorLocation(-PreviewActor->GetGeometryCacheComponent()->Bounds.Origin + FVector(0, 0, BoundsZOffset), false);
PreviewActor->GetGeometryCacheComponent()->RecreateRenderState_Concurrent();
}
}
void FGeometryCacheThumbnailScene::GetViewMatrixParameters(const float InFOVDegrees, FVector& OutOrigin, float& OutOrbitPitch, float& OutOrbitYaw, float& OutOrbitZoom) const
{
check(PreviewActor);
check(PreviewActor->GetGeometryCacheComponent());
check(PreviewActor->GetGeometryCacheComponent()->GeometryCache);
const float HalfFOVRadians = FMath::DegreesToRadians<float>(InFOVDegrees) * 0.5f;
// Add extra size to view slightly outside of the sphere to compensate for perspective
const float HalfMeshSize = PreviewActor->GetGeometryCacheComponent()->Bounds.SphereRadius * 1.15;
const float BoundsZOffset = GetBoundsZOffset(PreviewActor->GetGeometryCacheComponent()->Bounds);
const float TargetDistance = HalfMeshSize / FMath::Tan(HalfFOVRadians);
USceneThumbnailInfo* ThumbnailInfo = Cast<USceneThumbnailInfo>(PreviewActor->GetGeometryCacheComponent()->GeometryCache->ThumbnailInfo);
if (ThumbnailInfo)
{
if (TargetDistance + ThumbnailInfo->OrbitZoom < 0)
{
ThumbnailInfo->OrbitZoom = -TargetDistance;
}
}
else
{
ThumbnailInfo = USceneThumbnailInfo::StaticClass()->GetDefaultObject<USceneThumbnailInfo>();
}
}