void AmjuGLDX9::Scale(float x, float y, float z) { AMJU_CALL_STACK; Assert(s_matrixMode == AmjuGL::AMJU_MODELVIEW_MATRIX); D3DXMATRIX m; D3DXMatrixIdentity(&m); D3DXMatrixScaling(&m, x, y, z); g_matrixStack->MultMatrixLocal(&m); dd->SetTransform(D3DTS_WORLD, g_matrixStack->GetTop()); }
void AmjuGLDX9::RotateY(float degs) { AMJU_CALL_STACK; Assert(s_matrixMode == AmjuGL::AMJU_MODELVIEW_MATRIX); D3DXMATRIX m; D3DXMatrixIdentity(&m); D3DXMatrixRotationY(&m, D3DXToRadian(degs)); g_matrixStack->MultMatrixLocal( &m); dd->SetTransform(D3DTS_WORLD, g_matrixStack->GetTop()); }
void AmjuGLDX9::Translate(float x, float y, float z) { AMJU_CALL_STACK; Assert(s_matrixMode == AmjuGL::AMJU_MODELVIEW_MATRIX); // TODO Use current matrix mode, or scrap the idea of // manipulating proj and tex mats D3DXMATRIX m; D3DXMatrixIdentity(&m); D3DXMatrixTranslation(&m, x, y, z); g_matrixStack->MultMatrixLocal( &m); // WORLD -- VIEW matrix is always just identity dd->SetTransform( D3DTS_WORLD, g_matrixStack->GetTop() ); }
void AmjuGLDX9::SetIdentity() { AMJU_CALL_STACK; if (s_matrixMode == AmjuGL::AMJU_MODELVIEW_MATRIX) { g_matrixStack->LoadIdentity(); dd->SetTransform(D3DTS_WORLD, g_matrixStack->GetTop()); } else if (s_matrixMode == AmjuGL::AMJU_PROJECTION_MATRIX) { D3DXMATRIX mat; D3DXMatrixIdentity(&mat); dd->SetTransform(D3DTS_PROJECTION, &mat); } }
void Node::render() { LPD3DXMATRIXSTACK stack = getStack(); stack->Push(); stack->MultMatrixLocal(&_matrix); getDevice()->SetTransform(D3DTS_WORLDMATRIX(0), stack->GetTop()); _object->render(); for (int i = 0; i != _children.size(); i++) _children[i]->render(); stack->Pop(); }
void AmjuGLDX9::PopMatrix() { AMJU_CALL_STACK; if (s_matrixMode == AmjuGL::AMJU_MODELVIEW_MATRIX) { g_matrixStack->Pop(); D3DXMATRIX* m = g_matrixStack->GetTop(); // We always load Identity before Pushing, right ? Assert(m); dd->SetTransform(D3DTS_WORLD, m); } else { Assert(0); } }
void AmjuGLDX9::MultMatrix(const float m[16]) { D3DXMATRIX d3dm( m[0], m[1], m[2], m[3], m[4], m[5], m[6], m[7], m[8], m[9], m[10], m[11], m[12], m[13], m[14], m[15]); if (s_matrixMode == AmjuGL::AMJU_MODELVIEW_MATRIX) { g_matrixStack->MultMatrixLocal(&d3dm); dd->SetTransform(D3DTS_WORLD, g_matrixStack->GetTop()); } else if (s_matrixMode == AmjuGL::AMJU_PROJECTION_MATRIX) { Assert(0); } }
void AmjuGLDX9::RotateZ(float degs) { AMJU_CALL_STACK; D3DXMATRIX m; D3DXMatrixIdentity(&m); D3DXMatrixRotationZ(&m, D3DXToRadian(degs)); if (s_matrixMode == AmjuGL::AMJU_MODELVIEW_MATRIX) { g_matrixStack->MultMatrixLocal( &m); dd->SetTransform(D3DTS_WORLD, g_matrixStack->GetTop()); } else { matProj *= m; dd->SetTransform(D3DTS_PROJECTION, &matProj); } }
void AmjuGLDX9::GetMatrix(AmjuGL::MatrixMode mm, float result[16]) { AMJU_CALL_STACK; switch (mm) { case AmjuGL::AMJU_MODELVIEW_MATRIX: { const D3DXMATRIX* pm = g_matrixStack->GetTop(); memcpy(result, pm, 16 * sizeof(float)); } break; case AmjuGL::AMJU_PROJECTION_MATRIX: memcpy(result, &matProj, 16 * sizeof(float)); break; case AmjuGL::AMJU_TEXTURE_MATRIX: // Not supported break; } }