NW4F G3d
Loading...
Searching...
No Matches
g3d_SkeletalAnimObj.h
Go to the documentation of this file.
1#ifndef NW_G3D_SKELETALANIMOBJ_H_
2#define NW_G3D_SKELETALANIMOBJ_H_
3
4#include <nw/g3d/g3d_config.h>
5#include <nw/g3d/g3d_AnimObj.h>
6#include <nw/g3d/res/g3d_ResModel.h>
7#include <nw/g3d/res/g3d_ResSkeletalAnim.h>
8
9namespace nw { namespace g3d {
10
11class SkeletonObj;
12class ModelObj;
13
15{
16public:
17 class InitArg;
18
23
25
26 bool Init(const InitArg& arg, void* pBuffer, size_t bufferSize);
27
28 static size_t CalcBufferSize(const InitArg& arg);
29
30 virtual BindResult Bind(const ResModel* pModel);
31 virtual BindResult Bind(const ModelObj* pModelObj);
32 virtual void BindFast(const ResModel* pModel);
33
34 BindResult Bind(const ResSkeleton* pSkeleton);
35
36 BindResult Bind(const SkeletonObj* pSkeletonObj);
37
38 void BindFast(const ResSkeleton* pSkeleton);
39
40 void SetBindFlag(int boneIndex, BindFlag flag)
41 {
43 SetBindFlagImpl(boneIndex, flag);
44 }
45
46 void SetBindFlag(const ResSkeleton* pSkeleton, int boneIndex, BindFlag flag);
47
48 BindFlag GetBindFlag(int boneIndex)
49 {
51 return GetBindFlagImpl(boneIndex);
52 }
53
54 virtual void ClearResult();
55 virtual void Calc();
56 virtual void ApplyTo(ModelObj* pModelObj) const;
57
58 void ClearResult(const ResSkeleton* pSkeleton);
59
60 void ApplyTo(SkeletonObj* pSkeletonObj) const;
61
62 const ResSkeletalAnim* GetResource() const { return m_pRes; };
63
64 void SetResource(ResSkeletalAnim* pRes);
65
67 {
68 m_pRes = NULL;
70 }
71
73 {
75 return static_cast<BoneAnimResult*>(GetResultBuffer());
76 }
77
79 {
81 return static_cast<const BoneAnimResult*>(GetResultBuffer());
82 }
83
84 bool IsAcceptable(const ResSkeleton* pSkeleton) const
85 {
86 NW_G3D_ASSERT_NOT_NULL(pSkeleton);
88 return pSkeleton->GetBoneCount() <= GetBindTable().GetSize();
89 }
90
91 bool IsAcceptable(const ResSkeletalAnim* pRes) const
92 {
94 return pRes->GetBoneAnimCount() <= m_MaxBoneAnim;
95 }
96
98 {
99 return Align(sizeof(BoneAnimResult) * static_cast<size_t>(GetBindTable().GetAnimCount()), LL_CACHE_FETCH_SIZE);
100 }
101
102 size_t LCMount(void* pLC, size_t size, bool load);
103
104 void LCUnmount(bool store);
105
106 bool IsResultOnCache() const { return !!(m_Flag & MASK_RESULT); }
107
108protected:
109 enum Flag
110 {
111 CACHE_RESULT = 0x1 << 3,
112 INVALID_RESULT = 0x1 << 4,
114
115 };
116
117 ResBoneAnim* GetBoneAnim(int animIndex)
118 {
119 return ResBoneAnim::ResCast(&m_pBoneAnimArray[animIndex]);
120 }
121
122 const ResBoneAnim* GetBoneAnim(int animIndex) const
123 {
124 return ResBoneAnim::ResCast(&m_pBoneAnimArray[animIndex]);
125 }
126
127 template <typename ConvRot>
128 void CalcImpl();
129
130 template <typename ConvRot>
131 void ApplyToImpl(SkeletonObj* pSkeletonObj) const;
132
133private:
134 class Sizer;
135
139 mutable bit32 m_Flag;
143
145};
146
148{
149public:
151
152 void Calc(const InitArg& arg);
153
154 enum
155 {
159
161 };
162
164};
165
167{
168public:
170
171 void Clear()
172 {
174 m_ContextEnabled = true;
175 m_ContextAvailable = false;
176
177 }
178
179 void Reserve(const ResSkeleton* pResSkeleton)
180 {
181 NW_G3D_ASSERT_NOT_NULL(pResSkeleton);
182 m_NumBone = std::max(m_NumBone, pResSkeleton->GetBoneCount());
183 m_Sizer.Invalidate();
184 }
185
186 void Reserve(const ResModel* pResModel)
187 {
188 NW_G3D_ASSERT_NOT_NULL(pResModel);
189 Reserve(pResModel->GetSkeleton());
190 }
191
192 void Reserve(const ResSkeletalAnim* pResAnim)
193 {
194 NW_G3D_ASSERT_NOT_NULL(pResAnim);
195 m_NumBoneAnim = std::max(m_NumBoneAnim, pResAnim->GetBoneAnimCount());
196 m_NumCurve = std::max(m_NumCurve, pResAnim->GetCurveCount());
198 m_Sizer.Invalidate();
199 }
200
201 void EnableContext() { m_ContextEnabled = true; m_Sizer.Invalidate(); }
202
203 void DisableContext() { m_ContextEnabled = false; m_Sizer.Invalidate(); }
204
206
207 void SetMaxBoneCount(int boneCount)
208 {
209 NW_G3D_ASSERT(boneCount >= 0);
210 m_NumBone = boneCount;
211 m_Sizer.Invalidate();
212 }
213
214 int GetMaxBoneCount() const
215 {
216 NW_G3D_ASSERT(m_NumBone >= 0);
217 return m_NumBone;
218 }
219
220 void SetMaxBoneAnimCount(int boneAnimCount)
221 {
222 NW_G3D_ASSERT(boneAnimCount >= 0);
223 m_NumBoneAnim = boneAnimCount;
224 m_Sizer.Invalidate();
225 }
226
227 int GetMaxBoneAnimCount() const { return m_NumBoneAnim; }
228
229 void SetMaxCurveCount(int curveCount)
230 {
231 NW_G3D_ASSERT(curveCount >= 0);
232 m_NumCurve = curveCount;
233 m_ContextAvailable = true;
234 m_Sizer.Invalidate();
235 }
236
237 int GetMaxCurveCount() const { return m_NumCurve; }
238
239 bool IsValid() const { return m_NumBone >= 0 && m_NumBoneAnim >= 0 && m_NumCurve >= 0; }
240
241 Sizer& GetSizer() const { return m_Sizer; }
242
243private:
249
250 mutable Sizer m_Sizer;
251};
252
254{
255public:
261
262 class InitArg;
263
268
270
271 bool Init(const InitArg& arg, void* pBuffer, size_t bufferSize);
272
273 static size_t CalcBufferSize(const InitArg& arg);
274
275 void ClearResult();
276
277 void Blend(SkeletalAnimObj* pAnimObj, float weight);
278
279 void ApplyTo(SkeletonObj* pSkeletonObj) const;
280
281 void* GetBufferPtr() { return m_pBufferPtr; }
282
283 void SetBoneCount(int count)
284 {
285 NW_G3D_ASSERT(count <= m_MaxBone);
286 m_NumBone = static_cast<u16>(count);
287 }
288
289 int GetBoneCount() const { return m_NumBone; }
290
291 int GetMaxBoneCount() const { return m_MaxBone; }
292
293 void SetBlendMode(BlendMode mode) { m_Flag = (m_Flag & ~static_cast<bit32>(BLEND_MASK)) | mode; }
294
296
298
299 void DisableSlerp() { m_Flag &= ~static_cast<bit32>(USE_SLERP); }
300
301 bool IsSlerpEnabled() const { return 0 != (m_Flag & USE_SLERP); }
302
308
310 {
312 return static_cast<const BoneAnimBlendResult*>(m_pResultBuffer);
313 }
314
320
322 {
323 return Align(sizeof(BoneAnimBlendResult) * m_NumBone, LL_CACHE_FETCH_SIZE);
324 }
325
326 size_t LCMount(void* pLC, size_t size, bool load);
327
328 void LCUnmount(bool store);
329
330 bool IsResultOnCache() const { return !!(m_Flag & MASK_RESULT); }
331
332protected:
333 class Impl;
334
335 enum Flag
336 {
338 USE_SLERP = 0x1 << 1,
339 NORMALIZED = 0x1 << 2,
340 CACHE_RESULT = 0x1 << 3,
341 INVALID_RESULT = 0x1 << 4,
343 };
344
345 template <typename ConvRot, BlendMode mode>
346 void ApplyToImpl(SkeletonObj* pSkeletonObj) const;
347
348private:
349 class Sizer;
353 mutable bit32 m_Flag;
356
358};
359
361{
362public:
364
365 void Calc(const InitArg& arg);
366
367 enum
368 {
371 };
372
374};
375
377{
378public:
380
381 void Clear() { m_NumBone = -1; }
382
383 void Reserve(const ResSkeleton* pResSkeleton)
384 {
385 NW_G3D_ASSERT_NOT_NULL(pResSkeleton);
386 m_NumBone = std::max(m_NumBone, pResSkeleton->GetBoneCount());
387 m_Sizer.Invalidate();
388 }
389
390 void Reserve(const ResModel* pResModel)
391 {
392 NW_G3D_ASSERT_NOT_NULL(pResModel);
393 Reserve(pResModel->GetSkeleton());
394 }
395
396 void SetMaxBoneCount(int boneCount)
397 {
398 NW_G3D_ASSERT(boneCount >= 0);
399 m_NumBone = boneCount;
400 m_Sizer.Invalidate();
401 }
402
403 int GetMaxBoneCount() const { return m_NumBone; }
404
405 bool IsValid() const { return m_NumBone >= 0; }
406
407 Sizer& GetSizer() const { return m_Sizer; }
408
409private:
411 mutable Sizer m_Sizer;
412};
413
415{
416public:
417 static void Convert(BoneAnimResult* pResult);
418};
419
421{
422public:
423 static void Convert(BoneAnimResult* pResult);
424};
425
427{
428public:
429 static void Convert(Mtx34* pMtx, const BoneAnimResult* pResult);
430 static void Convert(Mtx34* pMtx, const BoneAnimBlendResult* pResult);
431};
432
434{
435public:
436 static void Convert(Mtx34* pMtx, const BoneAnimResult* pResult)
437 {
438 pMtx->SetR(pResult->euler);
439 }
440};
441
443{
444public:
445 static void Convert(Mtx34* pMtx, const BoneAnimResult* pResult)
446 {
447 pMtx->SetR(pResult->quat);
448 }
449
450 static void Convert(Mtx34* pMtx, const BoneAnimBlendResult* pResult)
451 {
452 pMtx->SetR(pResult->rotate);
453 }
454};
455
456namespace internal {
457
459bool LengthSqEqualsZero(float length)
460{
461 return length == 0.0f;
462}
463
464}
465
468{
469#if defined( __ghs__ )
470 f32x2 sincosx = Math::SinCos(pResult->euler.x);
471 f32x2 sincosy = Math::SinCos(pResult->euler.y);
472 f32x2 sincosz = Math::SinCos(pResult->euler.z);
473
474 f32x2 cossinx = __PS_MERGE10(sincosx, sincosx);
475
476 f32x2 sxsz_cxcz = __PS_MUL(sincosx, sincosz);
477 f32x2 cxsz_sxcz = __PS_MUL(cossinx, sincosz);
478 f32x2 cxcz_sxsz = __PS_MERGE10(sxsz_cxcz, sxsz_cxcz);
479 f32x2 sxcz_cxsz = __PS_MERGE10(cxsz_sxcz, cxsz_sxcz);
480
481 f32x2 sy_sy = __PS_MERGE00(sincosy, sincosy);
482 f32x2 cysz_cycz = __PS_MULS1(sincosz, sincosy);
483
484 f32x2 xz_yy = __PS_MADD(cxcz_sxsz, sy_sy, sxsz_cxcz);
485 f32x2 xy_yz = __PS_MSUB(sxcz_cxsz, sy_sy, cxsz_sxcz);
486
487 pResult->axes[0].x = cysz_cycz[1];
488 pResult->axes[1].x = cysz_cycz[0];
489
490 reinterpret_cast<f32x2&>(pResult->axes[0].a[1]) = __PS_MERGE00(xy_yz, xz_yy);
491 reinterpret_cast<f32x2&>(pResult->axes[1].a[1]) = __PS_MERGE11(xz_yy, xy_yz);
492#else
493 float sx, sy, sz, cx, cy, cz;
494 Math::SinCos(&sx, &cx, pResult->euler.x);
495 Math::SinCos(&sy, &cy, pResult->euler.y);
496 Math::SinCos(&sz, &cz, pResult->euler.z);
497
498 float cxcz = cx * cz;
499 float sxsy = sx * sy;
500 float cxsz = cx * sz;
501
502 pResult->axes[0].x = cy * cz;
503 pResult->axes[1].x = cy * sz;
504
505 pResult->axes[0].y = sxsy * cz - cxsz;
506 pResult->axes[1].y = sxsy * sz + cxcz;
507
508 pResult->axes[0].z = cxcz * sy + sx * sz;
509 pResult->axes[1].z = cxsz * sy - sx * cz;
510#endif
511}
512
515{
516 const Quat& quat = pResult->quat;
517 Vec3& axisX = pResult->axes[0];
518 Vec3& axisY = pResult->axes[1];
519
520 float yy2 = 2 * quat.y * quat.y;
521 float zz2 = 2 * quat.z * quat.z;
522 float xx2 = 2 * quat.x * quat.x;
523 float xy2 = 2 * quat.x * quat.y;
524 float xz2 = 2 * quat.x * quat.z;
525 float yz2 = 2 * quat.y * quat.z;
526 float wz2 = 2 * quat.w * quat.z;
527 float wx2 = 2 * quat.w * quat.x;
528 float wy2 = 2 * quat.w * quat.y;
529
530 axisX.x = 1.0f - yy2 - zz2;
531 axisX.y = xy2 - wz2;
532 axisX.z = xz2 + wy2;
533
534 axisY.x = xy2 + wz2;
535 axisY.y = 1.0f - xx2 - zz2;
536 axisY.z = yz2 - wx2;
537}
538
540void AxesToMtx::Convert(Mtx34* pMtx, const BoneAnimBlendResult* pResult)
541{
542 const Vec3& axisX = pResult->axes[0];
543 const Vec3& axisY = pResult->axes[1];
544 Vec3 axisZ;
545
546 axisZ.Cross(axisX, axisY);
547 float lengthSqY = Vec3::LengthSq(axisY);
548 float lengthSqZ = Vec3::LengthSq(axisZ);
550 {
551 NW_G3D_WARNING(false, "Failed to normalize matrix.\n");
552 return;
553 }
554
555#if defined( __ghs__ )
556 f32x2 lengthSqYZ = { lengthSqY, lengthSqZ };
557 f32x2 rsqrtYZ = Math::RSqrt(lengthSqYZ);
558 float rsqrtY = rsqrtYZ[0], rsqrtZ = rsqrtYZ[1];
559#else
560 float rsqrtY = Math::RSqrt(lengthSqY);
561 float rsqrtZ = Math::RSqrt(lengthSqZ);
562#endif
563
564 Vec3& unitX = *Vec3::Cast(pMtx->v[0].a);
565 Vec3& unitY = *Vec3::Cast(pMtx->v[1].a);
566 Vec3& unitZ = *Vec3::Cast(pMtx->v[2].a);
567 unitY.Mul(axisY, rsqrtY);
568 unitZ.Mul(axisZ, rsqrtZ);
569 unitX.Cross(unitY, unitZ);
570}
571
573void AxesToMtx::Convert(Mtx34* pMtx, const BoneAnimResult* pResult)
574{
575 const Vec3& axisX = pResult->axes[0];
576 const Vec3& axisY = pResult->axes[1];
577
578 Vec3& unitX = *Vec3::Cast(pMtx->v[0].a);
579 Vec3& unitY = *Vec3::Cast(pMtx->v[1].a);
580 Vec3& unitZ = *Vec3::Cast(pMtx->v[2].a);
581 unitX.Set(axisX);
582 unitY.Set(axisY);
583 unitZ.Cross(axisX, axisY);
584}
585
586} } // namespace nw::g3d
587
588#endif // NW_G3D_SKELETALANIMOBJ_H_
BindFlag
Definition g3d_AnimObj.h:279
Definition g3d_SkeletalAnimObj.h:427
static void Convert(Mtx34 *pMtx, const BoneAnimBlendResult *pResult)
Definition g3d_SkeletalAnimObj.h:540
static void Convert(Mtx34 *pMtx, const BoneAnimResult *pResult)
Definition g3d_SkeletalAnimObj.h:573
Definition g3d_SkeletalAnimObj.h:415
static void Convert(BoneAnimResult *pResult)
Definition g3d_SkeletalAnimObj.h:467
Definition g3d_SkeletalAnimObj.h:434
static void Convert(Mtx34 *pMtx, const BoneAnimResult *pResult)
Definition g3d_SkeletalAnimObj.h:436
Definition g3d_AnimObj.h:343
ModelAnimObj()
Definition g3d_AnimObj.h:364
BindFlag GetBindFlagImpl(int targetIndex) const
void SetBindFlagImpl(int targetIndex, BindFlag flag)
void SetTargetUnbound()
Definition g3d_AnimObj.h:372
Definition g3d_ModelObj.h:15
Definition g3d_SkeletalAnimObj.h:421
static void Convert(BoneAnimResult *pResult)
Definition g3d_SkeletalAnimObj.h:514
Definition g3d_SkeletalAnimObj.h:443
static void Convert(Mtx34 *pMtx, const BoneAnimBlendResult *pResult)
Definition g3d_SkeletalAnimObj.h:450
static void Convert(Mtx34 *pMtx, const BoneAnimResult *pResult)
Definition g3d_SkeletalAnimObj.h:445
Definition g3d_Sizer.h:10
Sizer()
Definition g3d_Sizer.h:18
Definition g3d_SkeletalAnimObj.cpp:430
Definition g3d_SkeletalAnimObj.h:377
bool IsValid() const
Definition g3d_SkeletalAnimObj.h:405
void Clear()
Definition g3d_SkeletalAnimObj.h:381
InitArg()
Definition g3d_SkeletalAnimObj.h:379
void Reserve(const ResSkeleton *pResSkeleton)
Definition g3d_SkeletalAnimObj.h:383
Sizer & GetSizer() const
Definition g3d_SkeletalAnimObj.h:407
Sizer m_Sizer
Definition g3d_SkeletalAnimObj.h:411
int m_NumBone
Definition g3d_SkeletalAnimObj.h:410
int GetMaxBoneCount() const
Definition g3d_SkeletalAnimObj.h:403
void Reserve(const ResModel *pResModel)
Definition g3d_SkeletalAnimObj.h:390
void SetMaxBoneCount(int boneCount)
Definition g3d_SkeletalAnimObj.h:396
Definition g3d_SkeletalAnimObj.h:361
void Calc(const InitArg &arg)
Definition g3d_SkeletalAnimObj.cpp:442
Chunk chunk[NUM_CHUNK]
Definition g3d_SkeletalAnimObj.h:373
@ RESULT_BUFFER
Definition g3d_SkeletalAnimObj.h:369
@ NUM_CHUNK
Definition g3d_SkeletalAnimObj.h:370
Sizer()
Definition g3d_SkeletalAnimObj.h:363
Definition g3d_SkeletalAnimObj.h:254
BlendMode GetBlendMode() const
Definition g3d_SkeletalAnimObj.h:295
void SetBlendMode(BlendMode mode)
Definition g3d_SkeletalAnimObj.h:293
size_t CalcLCSize() const
Definition g3d_SkeletalAnimObj.h:321
void * m_pBufferPtr
Definition g3d_SkeletalAnimObj.h:355
void ApplyToImpl(SkeletonObj *pSkeletonObj) const
Definition g3d_SkeletalAnimObj.cpp:556
void * m_pMemResultBuffer
Definition g3d_SkeletalAnimObj.h:354
void ClearResult()
Definition g3d_SkeletalAnimObj.cpp:489
const BoneAnimBlendResult * GetResultArray() const
Definition g3d_SkeletalAnimObj.h:309
u16 m_MaxBone
Definition g3d_SkeletalAnimObj.h:351
BlendMode
Definition g3d_SkeletalAnimObj.h:257
@ BLEND_INTERPOLATE
Definition g3d_SkeletalAnimObj.h:258
@ BLEND_ADD
Definition g3d_SkeletalAnimObj.h:259
static size_t CalcBufferSize(const InitArg &arg)
Definition g3d_SkeletalAnimObj.cpp:455
BoneAnimBlendResult * GetResultArray()
Definition g3d_SkeletalAnimObj.h:303
int GetMaxBoneCount() const
Definition g3d_SkeletalAnimObj.h:291
bool Init(const InitArg &arg, void *pBuffer, size_t bufferSize)
Definition g3d_SkeletalAnimObj.cpp:462
bool IsResultOnCache() const
Definition g3d_SkeletalAnimObj.h:330
Alignment
Definition g3d_SkeletalAnimObj.h:265
@ BUFFER_ALIGNMENT
Definition g3d_SkeletalAnimObj.h:266
size_t LCMount(void *pLC, size_t size, bool load)
void Blend(SkeletalAnimObj *pAnimObj, float weight)
Definition g3d_SkeletalAnimObj.cpp:497
bit32 m_Flag
Definition g3d_SkeletalAnimObj.h:353
void * m_pResultBuffer
Definition g3d_SkeletalAnimObj.h:350
int GetBoneCount() const
Definition g3d_SkeletalAnimObj.h:289
void ApplyTo(SkeletonObj *pSkeletonObj) const
Definition g3d_SkeletalAnimObj.cpp:548
void EnableSlerp()
Definition g3d_SkeletalAnimObj.h:297
Flag
Definition g3d_SkeletalAnimObj.h:336
@ USE_SLERP
Definition g3d_SkeletalAnimObj.h:338
@ INVALID_RESULT
Definition g3d_SkeletalAnimObj.h:341
@ MASK_RESULT
Definition g3d_SkeletalAnimObj.h:342
@ NORMALIZED
Definition g3d_SkeletalAnimObj.h:339
@ BLEND_MASK
Definition g3d_SkeletalAnimObj.h:337
@ CACHE_RESULT
Definition g3d_SkeletalAnimObj.h:340
void SetBoneCount(int count)
Definition g3d_SkeletalAnimObj.h:283
u16 m_NumBone
Definition g3d_SkeletalAnimObj.h:352
void * GetBufferPtr()
Definition g3d_SkeletalAnimObj.h:281
void DisableSlerp()
Definition g3d_SkeletalAnimObj.h:299
BoneAnimBlendResult * GetResultArrayMutable() const
Definition g3d_SkeletalAnimObj.h:315
bool IsSlerpEnabled() const
Definition g3d_SkeletalAnimObj.h:301
SkeletalAnimBlender()
Definition g3d_SkeletalAnimObj.h:269
void LCUnmount(bool store)
Definition g3d_SkeletalAnimObj.h:167
bool m_ContextAvailable
Definition g3d_SkeletalAnimObj.h:248
void SetMaxBoneCount(int boneCount)
Definition g3d_SkeletalAnimObj.h:207
int GetMaxBoneAnimCount() const
Definition g3d_SkeletalAnimObj.h:227
int GetMaxCurveCount() const
Definition g3d_SkeletalAnimObj.h:237
int m_NumBoneAnim
Definition g3d_SkeletalAnimObj.h:245
void Reserve(const ResSkeletalAnim *pResAnim)
Definition g3d_SkeletalAnimObj.h:192
void SetMaxCurveCount(int curveCount)
Definition g3d_SkeletalAnimObj.h:229
void EnableContext()
Definition g3d_SkeletalAnimObj.h:201
InitArg()
Definition g3d_SkeletalAnimObj.h:169
void SetMaxBoneAnimCount(int boneAnimCount)
Definition g3d_SkeletalAnimObj.h:220
void DisableContext()
Definition g3d_SkeletalAnimObj.h:203
void Clear()
Definition g3d_SkeletalAnimObj.h:171
Sizer & GetSizer() const
Definition g3d_SkeletalAnimObj.h:241
int m_NumBone
Definition g3d_SkeletalAnimObj.h:244
int m_NumCurve
Definition g3d_SkeletalAnimObj.h:246
void Reserve(const ResModel *pResModel)
Definition g3d_SkeletalAnimObj.h:186
Sizer m_Sizer
Definition g3d_SkeletalAnimObj.h:250
int GetMaxBoneCount() const
Definition g3d_SkeletalAnimObj.h:214
bool IsContextEnabled() const
Definition g3d_SkeletalAnimObj.h:205
bool IsValid() const
Definition g3d_SkeletalAnimObj.h:239
bool m_ContextEnabled
Definition g3d_SkeletalAnimObj.h:247
void Reserve(const ResSkeleton *pResSkeleton)
Definition g3d_SkeletalAnimObj.h:179
Definition g3d_SkeletalAnimObj.h:148
@ FRAMECACHE_ARRAY
Definition g3d_SkeletalAnimObj.h:158
@ NUM_CHUNK
Definition g3d_SkeletalAnimObj.h:160
@ BIND_TABLE
Definition g3d_SkeletalAnimObj.h:157
@ RESULT_BUFFER
Definition g3d_SkeletalAnimObj.h:156
void Calc(const InitArg &arg)
Definition g3d_SkeletalAnimObj.cpp:121
Chunk chunk[NUM_CHUNK]
Definition g3d_SkeletalAnimObj.h:163
Sizer()
Definition g3d_SkeletalAnimObj.h:150
Definition g3d_SkeletalAnimObj.h:15
virtual void ClearResult()
Definition g3d_SkeletalAnimObj.cpp:269
const ResBoneAnim * GetBoneAnim(int animIndex) const
Definition g3d_SkeletalAnimObj.h:122
void SetBindFlag(const ResSkeleton *pSkeleton, int boneIndex, BindFlag flag)
Definition g3d_SkeletalAnimObj.cpp:313
bit32 m_Flag
Definition g3d_SkeletalAnimObj.h:139
void ApplyTo(SkeletonObj *pSkeletonObj) const
Definition g3d_SkeletalAnimObj.cpp:351
SkeletalAnimObj()
Definition g3d_SkeletalAnimObj.h:24
size_t CalcLCSize() const
Definition g3d_SkeletalAnimObj.h:97
void BindFast(const ResSkeleton *pSkeleton)
Definition g3d_SkeletalAnimObj.cpp:250
BoneAnimResult * GetResultArray()
Definition g3d_SkeletalAnimObj.h:72
Alignment
Definition g3d_SkeletalAnimObj.h:20
@ BUFFER_ALIGNMENT
Definition g3d_SkeletalAnimObj.h:21
ResBoneAnimData * m_pBoneAnimArray
Definition g3d_SkeletalAnimObj.h:137
virtual void BindFast(const ResModel *pModel)
Definition g3d_SkeletalAnimObj.cpp:263
bool IsAcceptable(const ResSkeletalAnim *pRes) const
Definition g3d_SkeletalAnimObj.h:91
Flag
Definition g3d_SkeletalAnimObj.h:110
@ MASK_RESULT
Definition g3d_SkeletalAnimObj.h:113
@ INVALID_RESULT
Definition g3d_SkeletalAnimObj.h:112
@ CACHE_RESULT
Definition g3d_SkeletalAnimObj.h:111
void(SkeletalAnimObj::* m_pFuncApplyToImpl)(SkeletonObj *) const
Definition g3d_SkeletalAnimObj.h:142
static size_t CalcBufferSize(const InitArg &arg)
Definition g3d_SkeletalAnimObj.cpp:139
void(SkeletalAnimObj::* m_pFuncCalcImpl)()
Definition g3d_SkeletalAnimObj.h:141
ResBoneAnim * GetBoneAnim(int animIndex)
Definition g3d_SkeletalAnimObj.h:117
BindResult Bind(const ResSkeleton *pSkeleton)
Definition g3d_SkeletalAnimObj.cpp:204
bool IsAcceptable(const ResSkeleton *pSkeleton) const
Definition g3d_SkeletalAnimObj.h:84
virtual BindResult Bind(const ResModel *pModel)
Definition g3d_SkeletalAnimObj.cpp:238
s32 m_MaxBoneAnim
Definition g3d_SkeletalAnimObj.h:138
BindResult Bind(const SkeletonObj *pSkeletonObj)
Definition g3d_SkeletalAnimObj.cpp:232
void SetBindFlag(int boneIndex, BindFlag flag)
Definition g3d_SkeletalAnimObj.h:40
virtual void Calc()
Definition g3d_SkeletalAnimObj.cpp:333
bool Init(const InitArg &arg, void *pBuffer, size_t bufferSize)
Definition g3d_SkeletalAnimObj.cpp:146
BindFlag GetBindFlag(int boneIndex)
Definition g3d_SkeletalAnimObj.h:48
void LCUnmount(bool store)
bool IsResultOnCache() const
Definition g3d_SkeletalAnimObj.h:106
virtual void ApplyTo(ModelObj *pModelObj) const
Definition g3d_SkeletalAnimObj.cpp:345
virtual BindResult Bind(const ModelObj *pModelObj)
Definition g3d_SkeletalAnimObj.cpp:244
void ApplyToImpl(SkeletonObj *pSkeletonObj) const
Definition g3d_SkeletalAnimObj.cpp:407
size_t LCMount(void *pLC, size_t size, bool load)
const ResSkeletalAnim * GetResource() const
Definition g3d_SkeletalAnimObj.h:62
void SetResource(ResSkeletalAnim *pRes)
Definition g3d_SkeletalAnimObj.cpp:178
void ResetResource()
Definition g3d_SkeletalAnimObj.h:66
const BoneAnimResult * GetResultArray() const
Definition g3d_SkeletalAnimObj.h:78
void CalcImpl()
Definition g3d_SkeletalAnimObj.cpp:361
void * m_pMemResultBuffer
Definition g3d_SkeletalAnimObj.h:140
ResSkeletalAnim * m_pRes
Definition g3d_SkeletalAnimObj.h:136
void ClearResult(const ResSkeleton *pSkeleton)
Definition g3d_SkeletalAnimObj.cpp:283
Definition g3d_SkeletonObj.h:102
Definition g3d_MathCommon.h:9
static void SinCos(float *pSin, float *pCos, float rad)
Definition g3d_MathCommon-inl.h:238
static float RSqrt(float x)
Definition g3d_MathCommon-inl.h:150
Definition g3d_Matrix34.h:34
Mtx34 & SetR(const Quat &r)
Definition g3d_Matrix34-inl.h:150
Mtx34 & SetR(const Vec3 &r)
Definition g3d_Matrix34-inl.h:122
Definition g3d_Quaternion.h:28
Definition g3d_Vector3.h:30
Vec3 & Set(const Vec3 &v)
Definition g3d_Vector3-inl.h:47
static Vec3 * Cast(float *a)
Definition g3d_Vector3-inl.h:15
Vec3 & Cross(const Vec3 &lhs, const Vec3 &rhs)
Definition g3d_Vector3-inl.h:276
Vec3 & Mul(const Vec3 &lhs, float rhs)
Definition g3d_Vector3-inl.h:154
static float LengthSq(const Vec3 &v)
Definition g3d_Vector3-inl.h:241
Definition g3d_Binding.h:16
Definition g3d_ResSkeletalAnim.h:55
Definition g3d_ResModel.h:38
Definition g3d_ResSkeletalAnim.h:123
bool IsCurveBaked() const
Definition g3d_ResSkeletalAnim.h:158
int GetCurveCount() const
Definition g3d_ResSkeletalAnim.h:164
Definition g3d_ResSkeleton.h:162
#define NW_G3D_ASSERT_NOT_NULL(exp)
Definition g3d_assert.h:20
#define NW_G3D_ASSERT(exp)
Definition g3d_assert.h:17
#define NW_G3D_WARNING(exp,...)
Definition g3d_assert.h:54
#define NW_G3D_INLINE
Definition g3d_defs.h:68
#define NW_G3D_DISALLOW_COPY_AND_ASSIGN(TypeName)
Definition g3d_defs.h:81
u32 bit32
Definition g3d_defs.h:131
Definition g3d_SkeletalAnimObj.h:456
NW_G3D_INLINE bool LengthSqEqualsZero(float length)
Definition g3d_SkeletalAnimObj.h:459
Definition g3d_GfxManage.cpp:10
Definition g3d_Sizer.h:13
Vec4 v[DIM_MAJOR]
Definition g3d_Matrix34.h:26
float a[DIM]
Definition g3d_Vector4.h:18
Definition g3d_ResSkeletalAnim.h:28
Quat rotate
Definition g3d_ResSkeletalAnim.h:37
Vec3 axes[2]
Definition g3d_ResSkeletalAnim.h:36
Definition g3d_ResSkeletalAnim.h:14
Vec3 euler
Definition g3d_ResSkeletalAnim.h:21
Vec3 axes[2]
Definition g3d_ResSkeletalAnim.h:24
Quat quat
Definition g3d_ResSkeletalAnim.h:22
Definition g3d_ResSkeletalAnim.h:42