初始提交: UE5.3项目基础框架
This commit is contained in:
@ -0,0 +1,196 @@
|
||||
// Copyright 2020-2024 CesiumGS, Inc. and Contributors
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CesiumFeatureIdSet.h"
|
||||
#include "Kismet/BlueprintFunctionLibrary.h"
|
||||
#include "UObject/ObjectMacros.h"
|
||||
#include <CesiumGltf/AccessorUtility.h>
|
||||
|
||||
#include "CesiumPrimitiveFeatures.generated.h"
|
||||
|
||||
namespace CesiumGltf {
|
||||
struct ExtensionExtMeshFeatures;
|
||||
struct ExtensionExtInstanceFeatures;
|
||||
} // namespace CesiumGltf
|
||||
|
||||
/**
|
||||
* A Blueprint-accessible wrapper for a glTF Primitive's mesh features. It holds
|
||||
* views of the feature ID sets associated with this primitive. The collection
|
||||
* of features in the EXT_instance_features is very similar to that in
|
||||
* EXT_mesh_features, so FCesiumPrimitiveFeatures can be used to handle those
|
||||
* features too.
|
||||
*/
|
||||
USTRUCT(BlueprintType)
|
||||
struct CESIUMRUNTIME_API FCesiumPrimitiveFeatures {
|
||||
GENERATED_USTRUCT_BODY()
|
||||
|
||||
public:
|
||||
/**
|
||||
* Constructs an empty primitive features instance.
|
||||
*/
|
||||
FCesiumPrimitiveFeatures() : _vertexCount(0) {}
|
||||
|
||||
/**
|
||||
* Constructs a primitive features instance.
|
||||
*
|
||||
* @param Model The model that contains the EXT_mesh_features extension
|
||||
* @param Primitive The mesh primitive that stores EXT_mesh_features
|
||||
* extension
|
||||
* @param Features The EXT_mesh_features of the glTF mesh primitive
|
||||
*/
|
||||
FCesiumPrimitiveFeatures(
|
||||
const CesiumGltf::Model& Model,
|
||||
const CesiumGltf::MeshPrimitive& Primitive,
|
||||
const CesiumGltf::ExtensionExtMeshFeatures& Features);
|
||||
|
||||
/**
|
||||
* Constructs an instance feature object.
|
||||
*
|
||||
* @param Model The model that contains the EXT_instance_features extension
|
||||
* @param Node The node that stores EXT_instance_features
|
||||
* extension
|
||||
* @param InstanceFeatures The EXT_Instance_features of the glTF mesh
|
||||
* primitive
|
||||
*/
|
||||
FCesiumPrimitiveFeatures(
|
||||
const CesiumGltf::Model& Model,
|
||||
const CesiumGltf::Node& Node,
|
||||
const CesiumGltf::ExtensionExtInstanceFeatures& InstanceFeatures);
|
||||
|
||||
private:
|
||||
TArray<FCesiumFeatureIdSet> _featureIdSets;
|
||||
CesiumGltf::IndexAccessorType _indexAccessor;
|
||||
// Vertex count = 0 and _primitiveMode = -1 indicates instance features
|
||||
int64_t _vertexCount;
|
||||
int32_t _primitiveMode;
|
||||
|
||||
friend class UCesiumPrimitiveFeaturesBlueprintLibrary;
|
||||
};
|
||||
|
||||
UCLASS()
|
||||
class CESIUMRUNTIME_API UCesiumPrimitiveFeaturesBlueprintLibrary
|
||||
: public UBlueprintFunctionLibrary {
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
/**
|
||||
* Gets the primitive features of a glTF primitive component. If `component`
|
||||
* is not a Cesium glTF primitive component, the returned features are empty.
|
||||
*
|
||||
* @param component The component to get the features of.
|
||||
*/
|
||||
UFUNCTION(
|
||||
BlueprintCallable,
|
||||
BlueprintPure,
|
||||
Category = "Cesium|Primitive|Features")
|
||||
static const FCesiumPrimitiveFeatures&
|
||||
GetPrimitiveFeatures(const UPrimitiveComponent* component);
|
||||
|
||||
/**
|
||||
* Gets all the feature ID sets that are associated with the
|
||||
* primitive.
|
||||
*
|
||||
* @param PrimitiveFeatures The primitive.
|
||||
*/
|
||||
UFUNCTION(
|
||||
BlueprintCallable,
|
||||
BlueprintPure,
|
||||
Category = "Cesium|Primitive|Features")
|
||||
static const TArray<FCesiumFeatureIdSet>&
|
||||
GetFeatureIDSets(UPARAM(ref)
|
||||
const FCesiumPrimitiveFeatures& PrimitiveFeatures);
|
||||
|
||||
/**
|
||||
* Gets all the feature ID sets of the given type.
|
||||
*
|
||||
* @param PrimitiveFeatures The primitive.
|
||||
* @param Type The type of feature ID set to obtain. If the primitive has no
|
||||
* sets of that type, the returned array will be empty.
|
||||
*/
|
||||
UFUNCTION(
|
||||
BlueprintCallable,
|
||||
BlueprintPure,
|
||||
Category = "Cesium|Primitive|Features")
|
||||
static const TArray<FCesiumFeatureIdSet> GetFeatureIDSetsOfType(
|
||||
UPARAM(ref) const FCesiumPrimitiveFeatures& PrimitiveFeatures,
|
||||
ECesiumFeatureIdSetType Type);
|
||||
|
||||
/**
|
||||
* Get the number of vertices in the primitive.
|
||||
*
|
||||
* @param PrimitiveFeatures The primitive.
|
||||
*/
|
||||
UFUNCTION(
|
||||
BlueprintCallable,
|
||||
BlueprintPure,
|
||||
Category = "Cesium|Primitive|Features")
|
||||
static int64
|
||||
GetVertexCount(UPARAM(ref) const FCesiumPrimitiveFeatures& PrimitiveFeatures);
|
||||
|
||||
/**
|
||||
* Gets the index of the first vertex that makes up a given face of this
|
||||
* primitive.
|
||||
*
|
||||
* @param PrimitiveFeatures The primitive.
|
||||
* @param FaceIndex The index of the face.
|
||||
*/
|
||||
UFUNCTION(
|
||||
BlueprintCallable,
|
||||
BlueprintPure,
|
||||
Category = "Cesium|Primitive|Features")
|
||||
static int64 GetFirstVertexFromFace(
|
||||
UPARAM(ref) const FCesiumPrimitiveFeatures& PrimitiveFeatures,
|
||||
int64 FaceIndex);
|
||||
|
||||
/**
|
||||
* Gets the feature ID associated with the given face.
|
||||
*
|
||||
* @param PrimitiveFeatures The primitive.
|
||||
* @param FaceIndex The index of the face to obtain the feature ID of.
|
||||
* @param FeatureIDSetIndex A primitive may have multiple feature ID sets, so
|
||||
* this allows a feature ID set to be specified by index. This value should
|
||||
* index into the array of CesiumFeatureIdSets in the CesiumPrimitiveFeatures.
|
||||
* If the specified feature ID set index is invalid, this returns -1.
|
||||
*/
|
||||
UFUNCTION(
|
||||
BlueprintCallable,
|
||||
BlueprintPure,
|
||||
Category = "Cesium|Primitive|Features")
|
||||
static int64 GetFeatureIDFromFace(
|
||||
UPARAM(ref) const FCesiumPrimitiveFeatures& PrimitiveFeatures,
|
||||
int64 FaceIndex,
|
||||
int64 FeatureIDSetIndex = 0);
|
||||
|
||||
/**
|
||||
* Gets the feature ID associated with the instance at the given index.
|
||||
*/
|
||||
UFUNCTION(
|
||||
BlueprintCallable,
|
||||
BlueprintPure,
|
||||
Category = "Cesium|Primitive|Features")
|
||||
static int64 GetFeatureIDFromInstance(
|
||||
UPARAM(ref) const FCesiumPrimitiveFeatures& InstanceFeatures,
|
||||
int64 InstanceIndex,
|
||||
int64 FeatureIDSetIndex = 0);
|
||||
|
||||
/**
|
||||
* Gets the feature ID from the given line trace hit, assuming it
|
||||
* has hit a glTF primitive component containing this CesiumPrimitiveFeatures.
|
||||
*
|
||||
* @param PrimitiveFeatures The primitive.
|
||||
* @param Hit The line trace hit to try to obtain a feature ID from.
|
||||
* @param FeatureIDSetIndex A primitive may have multiple feature ID sets, so
|
||||
* this allows a feature ID set to be specified by index. This value should
|
||||
* index into the array of CesiumFeatureIdSets in the CesiumPrimitiveFeatures.
|
||||
* If the specified feature ID set index is invalid, this returns -1.
|
||||
*/
|
||||
UFUNCTION(
|
||||
BlueprintCallable,
|
||||
BlueprintPure,
|
||||
Category = "Cesium|Primitive|Features")
|
||||
static int64 GetFeatureIDFromHit(
|
||||
UPARAM(ref) const FCesiumPrimitiveFeatures& PrimitiveFeatures,
|
||||
const FHitResult& Hit,
|
||||
int64 FeatureIDSetIndex = 0);
|
||||
};
|
||||
Reference in New Issue
Block a user