Esempio n. 1
0
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());
}
Esempio n. 2
0
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());
}
Esempio n. 3
0
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() );
}
Esempio n. 4
0
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);
  }
}
Esempio n. 5
0
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();
}
Esempio n. 6
0
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);
  }
}
Esempio n. 7
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);
  }
}
Esempio n. 8
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);  
  }
}
Esempio n. 9
0
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;
  }
}