# DNA API 概述 以下是用于读取和写入 DNA 文件的主要方法概述。 以下文档适用于 C++。目前尚无 Python 文档。 如[此处](/docs/dna.md#api-overview)所述,有一些类用于从流中读取 DNA 或将其写入流。这些类包括: - [BinaryStreamReader](/dnacalib/DNACalib/include/dna/BinaryStreamReader.h) - [BinaryStreamWriter](/dnacalib/DNACalib/include/dna/BinaryStreamWriter.h) - [JSONStreamReader](/dnacalib/DNACalib/include/dna/JSONStreamReader.h) - [JSONStreamWriter](/dnacalib/DNACalib/include/dna/JSONStreamWriter.h) 创建读取器后,可以用它来查询 DNA 中包含的不同信息。 创建写入器后,可以用它来在 DNA 中设置新值。 这是通过本页列出的方法完成的。这些方法根据 DNA 文件中的[层级](/docs/dna.md#layers)进行分组。 **注意**: 本页并未列出所有可用方法。有关此处列出的方法的更多详细信息以及所有可用方法的列表,请参阅相应的读取器和/或写入器[文档](/dnacalib/DNACalib/include/dna/layers)。 ## BinaryStreamReader 包含用于创建和销毁 [BinaryStreamReader](/dnacalib/DNACalib/include/dna/BinaryStreamReader.h) 的方法。 创建 BinaryStreamReader 时,用户可以通过指定要加载的 LOD 来过滤 DNA 文件中的数据。如[此处](/docs/dna.md#reader)所述,还可以通过指定要加载的数据层来进行过滤。 - `create(stream, layer = DataLayer::All, maxLOD = 0u, memRes = nullptr)` BinaryStreamReader 的工厂方法。 参数: `stream` - 将从中读取数据的源流。 `layer` - 指定需要加载的数据层。 `maxLOD` - 要加载的最大细节级别。值为零表示加载所有 LOD。 `memRes` - 用于分配的内存资源。如果未提供内存资源,将使用默认分配机制。用户负责通过调用 destroy 释放返回的指针。 - `create(stream, layer, maxLOD, minLOD, memRes = nullptr)` BinaryStreamReader 的工厂方法。 参数: `stream` - 将从中读取数据的源流。 `layer` - 指定需要加载的数据层。 `maxLOD` - 要加载的最大细节级别。 `minLOD` - 要加载的最小细节级别。maxLOD / minLOD 的范围为 [0, LOD 总数 - 1] 表示加载所有 LOD。 `memRes` - 用于分配的内存资源。如果未提供内存资源,将使用默认分配机制。用户负责通过调用 destroy 释放返回的指针。 - `create(stream, layer, lods, lodCount, memRes = nullptr)` BinaryStreamReader 的工厂方法。 参数: `stream` - 将从中读取数据的源流。 `layer` - 指定需要加载的数据层。 `lods` - 指定要加载的具体 LOD 的数组。 `lodCount` - lods 数组中的元素数量。 `memRes` - 用于分配的内存资源。如果未提供内存资源,将使用默认分配机制。用户负责通过调用 destroy 释放返回的指针。 - `destroy(instance)` 用于释放 BinaryStreamReader 实例的方法。 参数: `instance` - 要释放的 BinaryStreamReader 实例。 ## BinaryStreamWriter - `create(stream, memRes = nullptr)` BinaryStreamWriter 的工厂方法。 参数: `stream` - 将向其写入数据的流。 `memRes` - 用于分配的内存资源。如果未提供内存资源,将使用默认分配机制。用户负责通过调用 destroy 释放返回的指针。 - `destroy(BinaryStreamWriter* instance)` 用于释放 BinaryStreamWriter 实例的方法。 参数: `instance` - 要释放的 BinaryStreamWriter 实例。 ## JSONStreamReader - `create(stream, memRes = nullptr)` JSONStreamReader 的工厂方法。 参数: `stream` - 将从中读取数据的源流。 `memRes` - 用于分配的内存资源。如果未提供内存资源,将使用默认分配机制。用户负责通过调用 destroy 释放返回的指针。 - `destroy(instance)` 用于释放 JSONStreamReader 实例的方法。 参数: `instance` - 要释放的 JSONStreamReader 实例。 ## JSONStreamWriter - `create(stream, indentWidth = 4u, memRes = nullptr)` JSONStreamWriter 的工厂方法。 参数: `stream` - 将向其写入数据的流。 `indentWidth` - 用于缩进的空格数。 `memRes` - 用于分配的内存资源。如果未提供内存资源,将使用默认分配机制。用户负责通过调用 destroy 释放返回的指针。 - `destroy(instance)` 用于释放 JSONStreamWriter 实例的方法。 参数: `instance` - 要释放的 JSONStreamWriter 实例。 ## setFrom() 方法 除了创建写入器的方法外,BinaryStreamReader 和 JSONStreamReader 都有一个从 [Writer](/dnacalib/DNACalib/include/dna/Writer.h) 继承的 setFrom() 方法,用于使用读取器中的数据初始化写入器。 使用此方法时,用于初始化写入器的数据可以按数据层进行过滤。 - `setFrom(source, layer = DataLayer::All, memRes = nullptr)` 从给定的读取器初始化写入器。 此函数通过调用读取器的每个 getter 函数并将返回值传递给写入器中的匹配 setter 函数,将所有数据从给定的读取器复制到写入器实例中。 参数: `source` - 需要从中复制数据的源 DNA 读取器。 `layer` - 限制应从给定源读取器接管哪些层。 `memRes` - 用于复制期间临时分配的可选内存资源。 ## 读取器方法 ### DescriptorReader 包含用于访问角色和骨骼各种元数据的只读访问器。 - `getName()` 角色名称。 - `getArchetype()` 角色原型。 - `getGender()` 角色性别。 - `getAge()` 角色年龄。 - `getTranslationUnit()` 使用的平移单位(厘米或米)。 - `getRotationUnit()` 使用的旋转单位(度或弧度)。 - `getCoordinateSystem()` 使用的坐标系统(x、y 和 z 轴的方向)。 - `getLODCount()` 可用的细节级别(例如 6 表示以下级别可用:[0,1,2,3,4,5],其中 0 是细节最高的 LOD,5 是细节最低的 LOD)。 - `getDBMaxLOD()` 此角色的 DNA 数据中存储的最大细节级别。该值相对于数据库中的 LOD-0。 - `getDBComplexity()` 用于驱动此角色骨骼的输入控制接口的名称。此参数表示角色的输入控制复杂度。 - `getDBName()` 角色源自的数据库的名称。来自同一数据库的所有角色必须具有相同的定义,但可能具有不同的复杂度或 LOD。 ### DefinitionReader 包含用于表示骨骼静态数据的 DNA 属性的只读访问器。 - `getGUIControlCount()` GUI 控制器的数量。 - `getGUIControlName(index)` 请求的 GUI 控制器的名称。 - `getRawControlCount()` 原始控制器的数量。 - `getRawControlName(index)` 请求的原始控制器的名称。 - `getJointCount()` 关节的数量。 - `getJointName(index)` 请求的关节的名称。 - `getJointIndicesForLOD(lod)` 指定 LOD 的关节索引列表。 - `getJointParentIndex(index)` 请求的关节父级的索引。 可以使用此函数遍历和重建关节层级。示例: 关节名称: [A, B, C, D, E, F, G, H, I] 层级结构: [0, 0, 0, 1, 1, 4, 2, 6, 2] 描述了以下层级结构: ``` A ├── B │ ├── D │ └── E │ └── F └── C ├── G │ └── H └── I ``` 请求关节 5(关节名称:F)的父级索引将返回 4(关节名称:E)。 请求根关节的父级索引:0(关节名称:A)将返回相同的索引 0。 - `getBlendShapeChannelCount()` 变形通道的数量。 - `getBlendShapeChannelName(index)` 请求的变形通道的名称。 - `getBlendShapeChannelIndicesForLOD(lod)` 指定 LOD 的变形通道索引列表。 - `getAnimatedMapCount()` 动画贴图的数量。 - `getAnimatedMapName(index)` 请求的动画贴图的名称。 - `getAnimatedMapIndicesForLOD(lod)` 指定 LOD 的动画贴图索引列表。 - `getMeshCount()` 网格的数量。 - `getMeshName(index)` 请求的网格的名称。 - `getMeshIndicesForLOD(lod)` 指定 LOD 的网格索引列表。 - `getMeshBlendShapeChannelMappingCount()` 网格-变形通道映射项的数量。 - `getMeshBlendShapeChannelMapping(index)` 保存指定映射索引的网格索引和相关变形通道索引的结构。 - `getMeshBlendShapeChannelMappingIndicesForLOD(lod)` 指定 LOD 的网格-变形通道映射索引列表。 - `getNeutralJointTranslation(index)` 绑定姿态下关节的平移值(x, y, z)。 - `getNeutralJointTranslationXs()` 绑定姿态下所有关节的 X 轴平移值列表。 - `getNeutralJointTranslationYs()` 绑定姿态下所有关节的 Y 轴平移值列表。 - `getNeutralJointTranslationZs()` 绑定姿态下所有关节的 Z 轴平移值列表。 - `getNeutralJointRotation(index)` 绑定姿态下关节的旋转值(x, y, z)。 - `getNeutralJointRotationXs()` 绑定姿态下所有关节的 X 轴旋转值列表。 - `getNeutralJointRotationYs()` 绑定姿态下所有关节的 Y 轴旋转值列表。 - `getNeutralJointRotationZs()` 绑定姿态下所有关节的 Z 轴旋转值列表。 ### BehaviorReader 包含用于定义骨骼评估的 DNA 属性的只读访问器。 - `getGUIToRawInputIndices()` 用于将 GUI 映射到原始控制器的输入索引。 - `getGUIToRawOutputIndices()` 用于将 GUI 映射到原始控制器的输出索引。 - `getGUIToRawFromValues()` 在 GUI 到原始控制器映射期间用于决定是否应评估特定条目的过滤值(下限)。 - `getGUIToRawToValues()` 在 GUI 到原始控制器映射期间用于决定是否应评估特定条目的过滤值(上限)。 - `getGUIToRawSlopeValues()` 在 GUI 到原始控制器映射期间用于计算输出值的计算值(斜率/梯度)。 - `getGUIToRawCutValues()` 在 GUI 到原始控制器映射期间用于计算输出值的计算值(垂直截距)。 - `getPSDCount()` 不同 PSD 表情的数量。 - `getPSDRowIndices()` PSD(输入)索引。 - `getPSDColumnIndices()` 控制器(输入)索引。 - `getPSDValues()` 与每个 PSD 行和列对相关联的权重。 - `getJointRowCount()` 完整未压缩关节矩阵中的行数。 - `getJointColumnCount()` 完整未压缩关节矩阵中的列数。 - `getJointVariableAttributeIndices(lod)` 请求的 LOD 的关节属性索引(输出索引)。 - `getJointGroupCount()` 整个关节矩阵中存在的关节组数量。 - `getJointGroupLODs(jointGroupIndex)` 请求的关节组中每个细节级别的行数。 每个元素的位置代表级别本身,而值表示属于该级别的关节组内的行数。例如: ``` [12, 9, 3] │ │ └── LOD-2 包含前 3 行 │ └── LOD-1 包含前 9 行 └── LOD-0 包含前 12 行 ``` - `getJointGroupInputIndices(jointGroupIndex)` 请求的关节组包含的列索引。这些列索引指向完整的未压缩关节矩阵。 - `getJointGroupOutputIndices(jointGroupIndex)` 请求的关节组包含的行索引。这些行索引指向完整的未压缩关节矩阵。 - `getJointGroupValues(jointGroupIndex)` 请求的关节组包含的值。 - `getJointGroupJointIndices(jointGroupIndex)` 请求的关节组包含的关节索引。 - `getBlendShapeChannelLODs()` 变形通道每个细节级别的输入索引数量。 每个元素的位置代表级别本身(例如 [0,1,2,3,4,5] 值 0 是最高细节的 LOD,值 5 是最低细节的 LOD),而值表示属于该级别的输入索引数量。 - `getBlendShapeChannelInputIndices()` 用于索引输入向量的输入索引。 - `getBlendShapeChannelOutputIndices()` 指定变形通道输出值位置的输出索引。 - `getAnimatedMapLODs()` 动画贴图每个细节级别的行数。 每个元素的位置代表级别本身(例如 [0,1,2,3,4,5] 值 0 是最高细节的 LOD,值 5 是最低细节的 LOD),而值表示属于该级别的行数(在条件表中)。 - `getAnimatedMapInputIndices()` 用于索引输入值数组的输入索引。 - `getAnimatedMapOutputIndices()` 指定计算输出值位置的输出索引。 - `getAnimatedMapFromValues()` 用于决定是否应评估特定条目的过滤值(下限)。 - `getAnimatedMapToValues()` 用于决定是否应评估特定条目的过滤值(上限)。 - `getAnimatedMapSlopeValues()` 用于计算输出值的计算值(斜率/梯度)。 - `getAnimatedMapCutValues()` 用于计算输出值的计算值(垂直截距)。 ### GeometryReader 包含与骨骼相关的几何数据的只读访问器。 - `getVertexPositionCount(meshIndex)` 整个网格中顶点位置的数量。 - `getVertexPosition(meshIndex, vertexIndex)` 指定网格中指定顶点的位置。顶点按顶点 ID 排序。 - `getVertexPositionXs(meshIndex)` 引用网格的所有顶点位置 X 值列表。 - `getVertexPositionYs(meshIndex)` 引用网格的所有顶点位置 Y 值列表。 - `getVertexPositionZs(meshIndex)` 引用网格的所有顶点位置 Z 值列表。 - `getVertexTextureCoordinateCount(meshIndex)` 整个网格中纹理坐标的数量。 - `getVertexTextureCoordinate(meshIndex, textureCoordinateIndex)` 指定网格中指定索引的纹理坐标。 - `getVertexTextureCoordinateUs(meshIndex)` 引用网格的所有纹理坐标 U 值列表。 - `getVertexTextureCoordinateVs(meshIndex)` 引用网格的所有纹理坐标 V 值列表。 - `getVertexNormalCount(meshIndex)` 整个网格中顶点法线的数量。 - `getVertexNormal(meshIndex, normalIndex)` 指定网格中指定索引的顶点法线。 - `getVertexNormalXs(meshIndex)` 引用网格的所有法线 X 值列表。 - `getVertexNormalYs(meshIndex)` 引用网格的所有法线 Y 值列表。 - `getVertexNormalZs(meshIndex)` 引用网格的所有法线 Z 值列表。 - `getVertexLayoutCount(meshIndex)` 整个网格中顶点布局的数量。顶点布局是顶点属性的集合。 - `getVertexLayout(meshIndex, layoutIndex)` 顶点布局仅包含可用于查询与顶点关联的实际属性(如位置、纹理坐标和法线)的属性索引。布局中的索引可与上述定义的 API 一起使用。 - `getVertexLayoutPositionIndices(meshIndex)` 引用网格中每个顶点的位置索引。 - `getVertexLayoutTextureCoordinateIndices(meshIndex)` 引用网格中每个顶点的纹理坐标索引。 - `getVertexLayoutNormalIndices(meshIndex)` 引用网格中每个顶点的法线索引。 - `getFaceCount(meshIndex)` 指定网格所包含的面的数量。 - `getFaceVertexLayoutIndices(meshIndex, faceIndex)` 属于指定网格上某个面的顶点布局索引列表。 - `getMaximumInfluencePerVertex(meshIndex)` 可能影响任何单个顶点的最大关节数量。 - `getSkinWeightsCount(meshIndex)` 与指定网格关联的蒙皮权重数量。 - `getSkinWeightsValues(meshIndex, vertexIndex)` 影响请求顶点的蒙皮权重列表。 - `getSkinWeightsJointIndices(meshIndex, vertexIndex)` 与指定顶点的每个蒙皮权重关联的关节索引列表。关节索引的存储顺序与其关联的权重相同。 - `getBlendShapeTargetCount(meshIndex)` 属于指定网格的变形目标数量。 - `getBlendShapeChannelIndex(meshIndex, blendShapeTargetIndex)` 请求的变形目标对应的变形通道索引。 - `getBlendShapeTargetDeltaCount(meshIndex, blendShapeTargetIndex)` 属于指定变形目标的增量数量。 - `getBlendShapeTargetDelta(meshIndex, blendShapeTargetIndex, deltaIndex)` 每个受影响顶点的增量列表。 - `getBlendShapeTargetDeltaXs(meshIndex, blendShapeTargetIndex)` 引用变形目标的所有增量 X 值列表。 - `getBlendShapeTargetDeltaYs(meshIndex, blendShapeTargetIndex)` 引用变形目标的所有增量 Y 值列表。 - `getBlendShapeTargetDeltaZs(meshIndex, blendShapeTargetIndex)` 引用变形目标的所有增量 Z 值列表。 - `getBlendShapeTargetVertexIndices(meshIndex, blendShapeTargetIndex)` 受引用变形目标影响的顶点位置索引。顶点位置索引的存储顺序与其关联的增量相同。这些索引可以通过 getVertexPosition 用于查询关联的顶点本身。 ## Writer methods ### DescriptorWriter 包含用于访问角色和骨骼各种元数据的只写访问器。 - `setName(name)` Sets character name. - `setArchetype(archetype)` Sets character archetype. - `setGender(gender)` Sets character gender. - `setAge(age)` Sets character age. - `setTranslationUnit(unit)` Sets translation unit (cm or m). - `setRotationUnit(unit)` Sets rotation unit (degrees or radians). - `setCoordinateSystem(system)` Sets coordinate system (directions of the axes). - `setLODCount(lodCount)` Sets available levels of detail (e.g. 6 which means the following levels are available: [0,1,2,3,4,5], where 0 is the LOD with the highest details, and 5 is the LOD with lowest details). - `setDBMaxLOD(lod)` Sets the maximum level of detail stored in the DNA data for this character. - `setDBComplexity(name)` Sets name of the input control interface used to drive this character rig. - `setDBName(name)` Sets name of the database from which the character originates. ### DefinitionWriter 包含用于表示骨骼静态数据的 DNA 属性的只写访问器。 - `clearGUIControlNames()` 删除所有存储的 GUI 控制器名称。 - `setGUIControlName(index, name)` 设置指定 GUI 控制器的名称。 - `clearRawControlNames()` 删除所有存储的原始控制器名称。 - `setRawControlName(index, name)` 设置指定原始控制器的名称。 - `clearJointNames()` 删除所有存储的关节名称。 - `setJointName(index, name)` 设置指定关节的名称。 - `clearJointIndices()` 删除所有存储的关节索引。 - `setJointIndices(index, jointIndices, count)` 将关节索引列表存储到指定索引。该索引表示整个关节索引列表的位置,而不是其单个元素的位置,即关节索引 2D 矩阵中的行索引。 - `clearLODJointMappings()` 删除所有存储的 LOD 到关节列表索引的映射条目。 - `setLODJointMapping(lod, index)` 设置哪些关节属于哪个细节级别。 - `clearBlendShapeChannelNames()` 删除所有存储的变形通道名称。 - `setBlendShapeChannelName(index, name)` 设置指定变形通道的名称。 - `clearBlendShapeChannelIndices()` 删除所有存储的变形通道索引。 - `setBlendShapeChannelIndices(index, blendShapeChannelIndices, count)` 将变形通道名称索引列表存储到指定索引。该索引表示整个变形通道索引列表的位置,而不是其单个元素的位置,即变形通道索引 2D 矩阵中的行索引。 - `clearLODBlendShapeChannelMappings()` 删除所有存储的 LOD 到变形通道列表索引的映射条目。 - `setLODBlendShapeChannelMapping(lod, index)` 设置哪些变形通道属于哪个细节级别。 - `clearAnimatedMapNames()` 删除所有存储的动画贴图名称。 - `setAnimatedMapName(index, name)` 设置指定动画贴图的名称。 - `clearAnimatedMapIndices()` 删除所有存储的动画贴图索引。 - `setAnimatedMapIndices(index, animatedMapIndices, count)` 将动画贴图名称索引列表存储到指定索引。该索引表示整个动画贴图索引列表的位置,而不是其单个元素的位置,即动画贴图索引 2D 矩阵中的行索引。 - `clearLODAnimatedMapMappings()` 删除所有存储的 LOD 到动画贴图列表索引的映射条目。 - `setLODAnimatedMapMapping(lod, index)` 设置哪些动画贴图属于哪个细节级别。 - `clearMeshNames()` 删除所有存储的网格名称。 - `setMeshName(index, name)` 设置指定网格的名称。 - `clearMeshIndices()` 删除所有存储的网格索引。 - `setMeshIndices(index, meshIndices, count)` 将网格名称索引列表存储到指定索引。该索引表示整个网格索引列表的位置,而不是其单个元素的位置,即网格索引 2D 矩阵中的行索引。 - `clearLODMeshMappings()` 删除所有存储的 LOD 到网格列表索引的映射条目。 - `setLODMeshMapping(lod, index)` 设置哪些网格属于哪个细节级别。 - `clearMeshBlendShapeChannelMappings()` 删除所有存储的网格到变形通道的映射条目。 - `setMeshBlendShapeChannelMapping(index, meshIndex, blendShapeChannelIndex)` 将变形通道与其网格关联。 - `setJointHierarchy(jointIndices, count)` 设置描述关节之间父子关系的简单数组。 示例: 关节名称: [A, B, C, D, E, F, G, H] 层级结构: [0, 0, 0, 1, 1, 4, 2, 2] 描述了以下层级结构: ``` A ├── B │ ├── D │ └── E │ └── F └── C ├── G └── H ``` - `setNeutralJointTranslations(translations, count)` 设置绑定姿态下关节的平移值。 - `setNeutralJointRotations(rotations, count)` 设置绑定姿态下关节的旋转值。 ### BehaviorWriter 包含用于定义骨骼评估的 DNA 属性的只写访问器。 - `setGUIToRawInputIndices(inputIndices, count)` 设置用于将 GUI 映射到原始控制器的输入索引。 - `setGUIToRawOutputIndices(outputIndices, count)` 设置用于将 GUI 映射到原始控制器的输出索引。 - `setGUIToRawFromValues(fromValues, count)` 设置在 GUI 到原始控制器映射期间用于决定是否应评估特定条目的过滤值(下限)。 - `setGUIToRawToValues(toValues, count)` 设置在 GUI 到原始控制器映射期间用于决定是否应评估特定条目的过滤值(上限)。 - `setGUIToRawSlopeValues(slopeValues, count)` 设置在 GUI 到原始控制器映射期间用于计算输出值的计算值(斜率/梯度)。 - `setGUIToRawCutValues(cutValues, count)` 设置在 GUI 到原始控制器映射期间用于计算输出值的计算值(垂直截距)。 - `setPSDCount(count)` 设置不同 PSD 表情的数量。 - `setPSDRowIndices(rowIndices, count)` 设置将成为 PSD 矩阵行的 PSD(输入)索引。 - `setPSDColumnIndices(columnIndices, count)` 设置将成为 PSD 矩阵列的控制器(输入)索引。 - `setPSDValues(weights, count)` 设置与每个 PSD 行和列对相关联的权重。 - `setJointRowCount(rowCount)` 设置完整未压缩关节矩阵中的行数。 - `setJointColumnCount(columnCount)` 设置完整未压缩关节矩阵中的列数。 - `clearJointGroups()` 删除所有关节组。 - `deleteJointGroup(jointGroupIndex)` 删除指定的关节组。 - `setJointGroupLODs(jointGroupIndex, lods, count)` 设置指定关节组中每个细节级别的行数。 每个元素的位置代表级别本身,而值表示属于该级别的关节组内的行数。例如: ``` [12, 9, 3] │ │ └── LOD-2 包含前 3 行 │ └── LOD-1 包含前 9 行 └── LOD-0 包含前 12 行 ``` - `setJointGroupInputIndices(jointGroupIndex, inputIndices, count)` 设置指定关节组包含的列索引。这些列索引指向完整的未压缩关节矩阵。 - `setJointGroupOutputIndices(jointGroupIndex, outputIndices, count)` 设置指定关节组包含的行索引。这些行索引指向完整的未压缩关节矩阵。 - `setJointGroupValues(jointGroupIndex, values, count)` 设置指定关节组包含的值。 - `setJointGroupJointIndices(jointGroupIndex, jointIndices, count)` 设置指定关节组包含的关节索引。 - `setBlendShapeChannelLODs(lods, count)` 设置变形通道每个细节级别的输入索引数量。 每个元素的位置代表级别本身(例如 [0,1,2,3,4,5] 值 0 是最高细节的 LOD,值 5 是最低细节的 LOD),而值表示属于该级别的输入索引数量。 - `setBlendShapeChannelInputIndices(inputIndices, count)` 设置用于索引输入向量的输入索引。 - `setBlendShapeChannelOutputIndices(outputIndices, count)` 设置指定变形通道输出值位置的输出索引。 - `setAnimatedMapLODs(lods, count)` 设置动画贴图每个细节级别的行数。 每个元素的位置代表级别本身(例如 [0,1,2,3,4,5] 值 0 是最高细节的 LOD,值 5 是最低细节的 LOD),而值表示属于该级别的行数(在条件表中)。 - `setAnimatedMapInputIndices(inputIndices, count)` 设置用于索引输入值数组的输入索引。 - `setAnimatedMapOutputIndices(outputIndices, count)` 设置指定计算输出值位置的输出索引。 - `setAnimatedMapFromValues(fromValues, count)` 设置用于决定是否应评估特定条目的过滤值(下限)。 - `setAnimatedMapToValues(toValues, count)` 设置用于决定是否应评估特定条目的过滤值(上限)。 - `setAnimatedMapSlopeValues(slopeValues, count)` 设置用于计算输出值的计算值(斜率/梯度)。 - `setAnimatedMapCutValues(cutValues, count)` 设置用于计算输出值的计算值(垂直截距)。 ### GeometryWriter 包含与骨骼相关的几何数据的只写访问器。 - `clearMeshes()` 删除所有网格。 - `deleteMesh(meshIndex)` 删除指定的网格。 - `setVertexPositions(meshIndex, positions, count)` 设置顶点位置。 - `setVertexTextureCoordinates(meshIndex, textureCoordinates, count)` 设置顶点纹理坐标。 - `setVertexNormals(meshIndex, normals, count)` 设置顶点法线。 - `setVertexLayouts(meshIndex, layouts, count)` 设置属于指定网格的顶点布局。 - `clearFaceVertexLayoutIndices(meshIndex)` 删除指定网格的所有顶点布局索引列表。 - `setFaceVertexLayoutIndices(meshIndex, faceIndex, layoutIndices, count)` 设置属于指定面的顶点布局索引。布局索引指向通过 setVertexLayouts() 设置的数组。 - `setMaximumInfluencePerVertex(meshIndex, maxInfluenceCount)` 设置可能影响任何单个顶点的最大关节数量。 - `clearSkinWeights(meshIndex)` 删除指定网格的所有蒙皮权重。 - `setSkinWeightsValues(meshIndex, vertexIndex, weights, count)` 设置影响引用顶点的蒙皮权重。权重总和必须等于 1。 - `setSkinWeightsJointIndices(meshIndex, vertexIndex, jointIndices, count)` 设置与指定顶点的每个蒙皮权重关联的关节索引。关节索引必须按与其关联的权重相同的顺序存储。 - `clearBlendShapeTargets(meshIndex)` 删除指定网格的所有变形目标。 - `setBlendShapeChannelIndex(meshIndex, blendShapeTargetIndex, blendShapeChannelIndex)` 设置指定变形目标对应的变形通道索引。将网格本地变形目标索引与定义层中的绝对变形通道索引关联。 - `setBlendShapeTargetDeltas(meshIndex, blendShapeTargetIndex, deltas, count)` 设置每个受影响顶点的增量。 - `setBlendShapeTargetVertexIndices(meshIndex, blendShapeTargetIndex, vertexIndices, count)` 设置受指定变形目标影响的顶点位置索引。顶点位置索引必须按与其关联的增量相同的顺序存储。