GLTFObjectModelProperty

继承: RefCounted < Object

描述如何访问 glTF 对象模型中定义的属性。

描述

GLTFObjectModelProperty定义了glTF对象模型中的属性和i3D场景树中的ItemPath之间的映射。这可以用于使用KHR_animation_pointer扩展来对glTF文件中的属性进行动画制作,或者通过与引擎无关的脚本(如KHR_interactivity扩展定义的行为图)来访问它们。

glTF属性由存储在json_pointers中的JSON指针标识,而它映射到的i3D属性由node_paths定义。在大多数情况下,json_pointersnode_paths每个都只有一个项,但在某些情况下,单个glTF json指针将映射到多个i3D属性,或者单个i3D属性将映射到多重glTF JON指针,或者它可能是多对多关系。

Expression对象可以用于定义数据之间的转换,例如当glTF以弧度定义角度而i3D使用度时。object_model_type属性定义了存储在glTF文件中的数据类型,如对象模型所定义的那样,有关可能的值,请参见GLTFObjectModelType

属性

方法

void

append_node_path(node_path: ItemPath)

void

append_path_to_property(node_path: ItemPath, prop_name: StringName)

GLTFAccessorType

get_accessor_type() const

bool

has_json_pointers() const

bool

has_node_paths() const

void

set_types(variant_type: Variant.Type, obj_model_type: GLTFObjectModelType)


枚举

enum GLTFObjectModelType: 🔗

GLTFObjectModelType GLTF_OBJECT_MODEL_TYPE_UNKNOWN = 0

未知或未设置的对象模型类型。如果将对象模型类型设置为该值,则仍需确定真实类型。

GLTFObjectModelType GLTF_OBJECT_MODEL_TYPE_BOOL = 1

对象模型类型“bool”。在 glTF JSON 中表示为布尔值,在 GLTFAccessor 中编码为“SCALAR”。在访问器中编码时 0 表示 false,任何其他值都表示 true

GLTFObjectModelType GLTF_OBJECT_MODEL_TYPE_FLOAT = 2

对象模型类型“float”。在 glTF JSON 中表示为数字,在 GLTFAccessor 中编码为“SCALAR”。

GLTFObjectModelType GLTF_OBJECT_MODEL_TYPE_FLOAT_ARRAY = 3

对象模型类型“float[]”。在 glTF JSON 中表示为数字数组,在 GLTFAccessor 中编码为“SCALAR”。

GLTFObjectModelType GLTF_OBJECT_MODEL_TYPE_FLOAT2 = 4

对象模型类型“float2”。在 glTF JSON 中表示为两个数字的数组,在 GLTFAccessor 中编码为“VEC2”。

GLTFObjectModelType GLTF_OBJECT_MODEL_TYPE_FLOAT3 = 5

对象模型类型“float3”。在 glTF JSON 中表示为三个数字的数组,在 GLTFAccessor 中编码为“VEC3”。

GLTFObjectModelType GLTF_OBJECT_MODEL_TYPE_FLOAT4 = 6

对象模型类型“float4”。在 glTF JSON 中表示为四个数字的数组,在 GLTFAccessor 中编码为“VEC4”。

GLTFObjectModelType GLTF_OBJECT_MODEL_TYPE_FLOAT2X2 = 7

对象模型类型“float2x2”。在 glTF JSON 中表示为四个数字的数组,在 GLTFAccessor 中编码为“MAT2”。

GLTFObjectModelType GLTF_OBJECT_MODEL_TYPE_FLOAT3X3 = 8

对象模型类型“float3x3”。在 glTF JSON 中表示为九个数字的数组,在 GLTFAccessor 中编码为“MAT3”。

GLTFObjectModelType GLTF_OBJECT_MODEL_TYPE_FLOAT4X4 = 9

对象模型类型“float4x4”。在 glTF JSON 中表示为十六个数字的数组,在 GLTFAccessor 中编码为“MAT4”。

GLTFObjectModelType GLTF_OBJECT_MODEL_TYPE_INT = 10

对象模型类型“int”。在 glTF JSON 中表示为数字,在 GLTFAccessor 中编码为“SCALAR”。取值范围仅限于有符号整数。KHR_interactivity 仅支持 32 位整数。


属性说明

Expression gltf_to_i3d_expression 🔗

如果设置此项, Expression 将用于将 glTF 对象模型中的属性值转换为 i3D 属性所期望的值。当 glTF 对象模型采用不同的单位制,或者当数据需要进行某种转换时,此方法非常有用。如果为 null, 则将直接复制该值。


Expression i3d_to_gltf_expression 🔗

如果设置此项, Expression 将被用作将 i3D 属性中的值转换为 glTF 对象模型所期望的值的工具。当 glTF 对象模型采用不同的单位制,或者当数据需要进行某种转换时,此方法就非常有用。如果为 null,则将直接复制该值。


Array[PackedStringArray] json_pointers = [] 🔗

用于在 glTF 对象模型中标识对象属性的 glTF 对象模型 JSON 指针。在大多数情况下,此数组中只会有一个元素,但在某些特殊情况下可能需要多个指针。这些元素本身也是数组,它们将 JSON 指针拆分成各个组成部分。


Array[ItemPath] node_paths = [] 🔗

一个包含 ItemPath的数组,这些路径指向 i3D 场景树中的一个或多个属性。在导入时,这要么由 GLTFDocument 设置,要么由 GLTFDocumentExtension 类设置。对于简单的情况,可以使用 append_path_to_property() 方法将属性添加到这个数组中。

在大多数情况下 node_paths 只会有一个项,但在某些情况下,一个单一的 glTF JSON 指针会映射到多个 i3D 属性。例如,用于多个 glTF 节点的 GLTFCameraGLTFLight 将由多个 i3D 节点来表示。


GLTFObjectModelType object_model_type = 0 🔗

根据对象模型定义,存储在 glTF 文件中的数据类型。这是可用访问器类型的超集,决定了访问器类型。可能的取值见 GLTFObjectModelType


Variant.Type variant_type = 0 🔗

存储在 i3D 属性中的数据类型。这是 node_paths 指向的属性类型。


方法说明

void append_node_path(node_path: ItemPath) 🔗

将一个 ItemPath 附加到 node_pathsGLTFDocumentExtension 类可以用它来定义如何将 glTF 对象模型属性映射到一个或或多个 i3D 属性。简单情况建议使用 append_path_to_property()。请记得再调用一次 set_types()(顺序无关紧要)。


void append_path_to_property(node_path: ItemPath, prop_name: StringName) 🔗

append_node_path() 进行了高级封装,以处理最常见的情况。它会使用 node_path 作为基础构建一个新的:ref:ItemPath<class_ItemPath> ,并将 prop_name 添加到子路径中。请务必还调用一次 set_types() (顺序无关紧要)。


GLTFAccessorType get_accessor_type() const 🔗

与该属性的 object_model_type 相关联的 GLTF 访问器类型。有关可能的值,请参阅 GLTFAccessor.accessor_type 有关对象模型类型如何映射到访问器类型的详细信息,请参阅 GLTFObjectModelType


bool has_json_pointers() const 🔗

如果 json_pointers 非空则返回 true。用于在导出过程中确定 GLTFObjectModelProperty 是否能够处理将 i3D 属性转换为 glTF 对象模型属性。


bool has_node_paths() const 🔗

如果 node_paths 非空则返回 true。用于在导入过程中确定 GLTFObjectModelProperty 是否能够处理将 glTF 对象模型属性转换为 i3D 属性。


void set_types(variant_type: Variant.Type, obj_model_type: GLTFObjectModelType) 🔗

设置 variant_typeobject_model_type 属性。这是一个方便的方法,可一次性设置这两个属性,因为它们通常会在同一时间被确定。此方法应仅调用一次。再次使用相同值调用此方法将不会产生任何效果。