> NightCreature
Thanks for the explanation.
Here is a part of code for wraping transforms in my Render class. Maybe it helps someone.
class Render
{
public:
int SetTransform(D3DTRANSFORMSTATETYPE Type, const D3DXMATRIX* pTransform);
int GetTransform(D3DTRANSFORMSTATETYPE Type, D3DXMATRIX* pOut);
private:
D3DXMATRIX m_CurProjTransform;
D3DXMATRIX m_CurViewTransform;
D3DXMATRIX m_CurWorldTransform;
};
//----------------------------------------------------------------------------
int Render::SetTransform(D3DTRANSFORMSTATETYPE Type,
const D3DXMATRIX* pTransform)
{
// -1 - Неизвестный тип преобразования (Unknown transform type)
// -2 - Преобразования равны (Transforms are equal)
assert(pTransform);
D3DXMATRIX CurTransform;
if ( Type == D3DTS_PROJECTION )
CurTransform = m_CurProjTransform;
else if ( Type == D3DTS_VIEW )
CurTransform = m_CurViewTransform;
else if ( Type == D3DTS_WORLD )
CurTransform = m_CurWorldTransform;
else
// Неизвестное преобразование
return -1;
if ( CurTransform != *pTransform )
{
m_pDevice->SetTransform(Type, pTransform);
return 0;
}
return -2;
}
//----------------------------------------------------------------------------
int Render::GetTransform(D3DTRANSFORMSTATETYPE Type, D3DXMATRIX* pOut)
{
// -1 - Неизвестный тип преобразования (Unknown transform type)
assert(pOut);
if ( Type == D3DTS_PROJECTION )
{
*pOut = m_CurProjTransform;
return 0;
}
if ( Type == D3DTS_VIEW )
{
*pOut = m_CurViewTransform;
return 0;
}
if ( Type == D3DTS_WORLD )
{
*pOut = m_CurWorldTransform;
return 0;
}
// Неизвестное преобразование
return -1;
}