MetaFusion/docs/dna_api.md

565 lines
27 KiB
Markdown
Raw Normal View History

2025-01-06 23:33:41 +08:00
# 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)`
设置受指定变形目标影响的顶点位置索引。顶点位置索引必须按与其关联的增量相同的顺序存储。