forked from TomohikoMukai/ssdr
-
Notifications
You must be signed in to change notification settings - Fork 0
/
SSDR.h
51 lines (45 loc) · 1.3 KB
/
SSDR.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#pragma once
#include <vector>
#include <DirectXMath.h>
#include "RigidTransform.h"
namespace SSDR
{
// 入力データ構造体
struct Input
{
//! 頂点数
int numVertices;
//! 例示データ数
int numExamples;
//! バインド頂点座標(頂点数)
std::vector<DirectX::XMFLOAT3A> bindModel;
//! 例示形状頂点座標 (例示データ数 x 頂点数)
std::vector<DirectX::XMFLOAT3A> sample;
Input() : numVertices(0), numExamples(0) {}
~Input() {}
};
// 出力データ構造体
struct Output
{
//! ボーン数
int numBones;
//! スキニングウェイト(頂点数 x インデクス数)
std::vector<float> weight;
//! インデクス(頂点数 x インデクス数)
std::vector<int> index;
//! スキニング行列(例示データ数 x 骨数)
std::vector<RigidTransform> boneTrans;
};
// 計算パラメータ構造体
struct Parameter
{
//! 最小ボーン数
int numMinBones;
//! 頂点毎にバインドされる最大ボーン数
int numIndices;
//! 最大反復回数
int numMaxIterations;
};
extern double Decompose(Output& output, const Input& input, const Parameter& param);
extern double ComputeApproximationErrorSq(const Output& output, const Input& input, const Parameter& param);
}