first
This commit is contained in:
@@ -0,0 +1,161 @@
|
||||
/**
|
||||
* Copyright(c) Live2D Inc. All rights reserved.
|
||||
*
|
||||
* Use of this source code is governed by the Live2D Open Software license
|
||||
* that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html.
|
||||
*/
|
||||
|
||||
#include "CubismMatrix44.hpp"
|
||||
|
||||
namespace Live2D { namespace Cubism { namespace Framework {
|
||||
CubismMatrix44::CubismMatrix44()
|
||||
{
|
||||
LoadIdentity();
|
||||
}
|
||||
|
||||
CubismMatrix44::~CubismMatrix44()
|
||||
{ }
|
||||
|
||||
void CubismMatrix44::LoadIdentity()
|
||||
{
|
||||
csmFloat32 c[16] = {
|
||||
1.0f, 0.0f, 0.0f, 0.0f,
|
||||
0.0f, 1.0f, 0.0f, 0.0f,
|
||||
0.0f, 0.0f, 1.0f, 0.0f,
|
||||
0.0f, 0.0f, 0.0f, 1.0f
|
||||
};
|
||||
|
||||
SetMatrix(c);
|
||||
}
|
||||
|
||||
csmFloat32* CubismMatrix44::GetArray()
|
||||
{
|
||||
return _tr;
|
||||
}
|
||||
|
||||
void CubismMatrix44::Multiply(csmFloat32* a, csmFloat32* b, csmFloat32* dst)
|
||||
{
|
||||
csmFloat32 c[16] = {
|
||||
0.0f, 0.0f, 0.0f, 0.0f,
|
||||
0.0f, 0.0f, 0.0f, 0.0f,
|
||||
0.0f, 0.0f, 0.0f, 0.0f,
|
||||
0.0f, 0.0f, 0.0f, 0.0f
|
||||
};
|
||||
csmInt32 n = 4;
|
||||
|
||||
for (csmInt32 i = 0; i < n; ++i)
|
||||
{
|
||||
for (csmInt32 j = 0; j < n; ++j)
|
||||
{
|
||||
for (csmInt32 k = 0; k < n; ++k)
|
||||
{
|
||||
c[j + i * 4] += a[k + i * 4] * b[j + k * 4];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (csmInt32 i = 0; i < 16; ++i)
|
||||
{
|
||||
dst[i] = c[i];
|
||||
}
|
||||
}
|
||||
|
||||
void CubismMatrix44::TranslateRelative(csmFloat32 x, csmFloat32 y)
|
||||
{
|
||||
csmFloat32 tr1[16] = {
|
||||
1.0f, 0.0f, 0.0f, 0.0f,
|
||||
0.0f, 1.0f, 0.0f, 0.0f,
|
||||
0.0f, 0.0f, 1.0f, 0.0f,
|
||||
x, y, 0.0f, 1.0f
|
||||
};
|
||||
|
||||
Multiply(tr1, _tr, _tr);
|
||||
}
|
||||
|
||||
void CubismMatrix44::Translate(csmFloat32 x, csmFloat32 y)
|
||||
{
|
||||
_tr[12] = x;
|
||||
_tr[13] = y;
|
||||
}
|
||||
|
||||
void CubismMatrix44::ScaleRelative(csmFloat32 x, csmFloat32 y)
|
||||
{
|
||||
csmFloat32 tr1[16] = {
|
||||
x, 0.0f, 0.0f, 0.0f,
|
||||
0.0f, y, 0.0f, 0.0f,
|
||||
0.0f, 0.0f, 1.0f, 0.0f,
|
||||
0.0f, 0.0f, 0.0f, 1.0f
|
||||
};
|
||||
|
||||
Multiply(tr1, _tr, _tr);
|
||||
}
|
||||
|
||||
void CubismMatrix44::Scale(csmFloat32 x, csmFloat32 y)
|
||||
{
|
||||
_tr[0] = x;
|
||||
_tr[5] = y;
|
||||
}
|
||||
|
||||
csmFloat32 CubismMatrix44::TransformX(csmFloat32 src)
|
||||
{
|
||||
return _tr[0] * src + _tr[12];
|
||||
}
|
||||
|
||||
csmFloat32 CubismMatrix44::InvertTransformX(csmFloat32 src)
|
||||
{
|
||||
return (src - _tr[12]) / _tr[0];
|
||||
}
|
||||
|
||||
csmFloat32 CubismMatrix44::TransformY(csmFloat32 src)
|
||||
{
|
||||
return _tr[5] * src + _tr[13];
|
||||
}
|
||||
|
||||
csmFloat32 CubismMatrix44::InvertTransformY(csmFloat32 src)
|
||||
{
|
||||
return (src - _tr[13]) / _tr[5];
|
||||
}
|
||||
|
||||
void CubismMatrix44::SetMatrix(csmFloat32* tr)
|
||||
{
|
||||
for (csmInt32 i = 0; i < 16; ++i)
|
||||
{
|
||||
_tr[i] = tr[i];
|
||||
}
|
||||
}
|
||||
|
||||
csmFloat32 CubismMatrix44::GetScaleX() const
|
||||
{
|
||||
return _tr[0];
|
||||
}
|
||||
|
||||
csmFloat32 CubismMatrix44::GetScaleY() const
|
||||
{
|
||||
return _tr[5];
|
||||
}
|
||||
|
||||
csmFloat32 CubismMatrix44::GetTranslateX() const
|
||||
{
|
||||
return _tr[12];
|
||||
}
|
||||
|
||||
csmFloat32 CubismMatrix44::GetTranslateY() const
|
||||
{
|
||||
return _tr[13];
|
||||
}
|
||||
|
||||
void CubismMatrix44::TranslateX(csmFloat32 x)
|
||||
{
|
||||
_tr[12] = x;
|
||||
}
|
||||
|
||||
void CubismMatrix44::TranslateY(csmFloat32 y)
|
||||
{
|
||||
_tr[13] = y;
|
||||
}
|
||||
|
||||
void CubismMatrix44::MultiplyByMatrix(CubismMatrix44* m)
|
||||
{
|
||||
Multiply(m->GetArray(), _tr, _tr);
|
||||
}
|
||||
}}}
|
||||
Reference in New Issue
Block a user