Beispiel #1
0
/* Animation system initialization function.
 * ARGUMENTS:
 *   - window:
 *       HWND hWnd;
 * RETURNS: None.
 */
VOID DS1_AnimInit( HWND hWnd )
{
  INT i;
  PIXELFORMATDESCRIPTOR pfd = {0};
  LARGE_INTEGER t;

  memset(&DS1_Anim, 0, sizeof(ds1ANIM));
  /* Store window and create memory device context */
  DS1_Anim.hWnd = hWnd;
  DS1_Anim.hDC = GetDC(hWnd);
  DS1_Anim.NumOfUnits = 0;

  /* OpenGL init: pixel format setup */
  pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
  pfd.nVersion = 1;
  pfd.dwFlags = PFD_DOUBLEBUFFER | PFD_SUPPORT_OPENGL;
  pfd.cColorBits = 32;
  pfd.cDepthBits = 32;
  i = ChoosePixelFormat(DS1_Anim.hDC, &pfd);
  DescribePixelFormat(DS1_Anim.hDC, i, sizeof(pfd), &pfd);
  SetPixelFormat(DS1_Anim.hDC, i, &pfd);

  /* OpenGL init: setup rendering context */
  DS1_Anim.hGLRC = wglCreateContext(DS1_Anim.hDC);
  wglMakeCurrent(DS1_Anim.hDC, DS1_Anim.hGLRC);

  /* OpenGL init: setup extensions: GLEW library */
  if (glewInit() != GLEW_OK ||
      !(GLEW_ARB_vertex_shader && GLEW_ARB_fragment_shader))
  {
    wglMakeCurrent(NULL, NULL);
    wglDeleteContext(DS1_Anim.hGLRC);
    ReleaseDC(DS1_Anim.hWnd, DS1_Anim.hDC);
    exit(0);
  }

  /* Timer initialization */
  QueryPerformanceFrequency(&t);
  DS1_TimePerSec = t.QuadPart;
  QueryPerformanceCounter(&t);
  DS1_StartTime = DS1_OldTime = DS1_OldTimeFPS = t.QuadPart;
  DS1_PauseTime = 0;

  DS1_RndMatrWorld = MatrixIdentity();
  DS1_RndMatrProj = MatrFrustum(-1, 1, -1, 1, 1, 100);
  DS1_RndMatrView = MatrView(VecSet(0, 0, 3), VecSet(0, 0, 0), VecSet(0, 1, 0));

  /* OpenGL specific initialization */
  glClearColor((FLT)100 / 255, (FLT)200 / 255, (FLT)150 / 255, 1);
  /*
  RGB(100, 200, 150)
  glClearColor(0.3, 0.5, 0.7, 1);
  */
  DS1_Anim.ShNo = 1;
  glEnable(GL_DEPTH_TEST);
  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  DS1_RndPrg = DS1_RndShaderLoad( (DS1_Anim.ShNo == 1) ? DS1_SHADER_NAME_1 : DS1_SHADER_NAME_2);
  /* glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); */
} /* End of 'DS1_ANIMInit' function */
Beispiel #2
0
/* Функция построения объекта анимации.
 * АРГУМЕНТЫ:
 *   - указатель на "себя" - сам объект анимации:
 *       as3UNIT_MODEL *Uni;
 *   - указатель на контекст анимации:
 *       as3ANIM *Ani;
 * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Нет.
 */
static VOID AS3_AnimUnitRender( as3UNIT_MODEL *Uni, as3ANIM *Ani )
{  
  INT i, j;

  AS3_RndMatrView = MatrView(VecSet(8, 8, 8),
                             VecSet(0, 0, 0),
		             VecSet(0, 1, 0));

  if (Ani->KeysClick['W'])
    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  if (Ani->KeysClick['Q'])
    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  glEnable(GL_DEPTH_TEST);

  for (i = -2; i < 2; i++)
    for (j = -2; j < 2; j++)
    {
      AS3_RndMatrWorld =
                         MatrMulMatr(MatrMulMatr(MatrMulMatr(
			             MatrTranslate(Ani->JX * 228, Ani->JY * 228, 0),
				     MatrScale(0.1, 0.1, 0.1)),
				     MatrRotateY(30 * Ani->Time + Ani->JR * 180)),
				     MatrTranslate(j * 2.5, 0, i * 2.5 + 228 * Ani->JZ));
      glColor3d(i & 1, j & 1, 1 - ((i & 1) + (j & 1)) / 2);
      AS3_RndGObjDraw(&Uni->Model);
    }
  
} /* End of 'AS3_AnimUnitRender' function */
Beispiel #3
0
/* Функция построения объекта анимации.
 * АРГУМЕНТЫ:
 *   - указатель на "себя" - сам объект анимации:
 *       AO5UNIT_MODEL *Uni;
 *   - указатель на контекст анимации:
 *       AO5ANIM *Ani;
 * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Нет.
 */
static VOID AO5_AnimUnitRender( ao5UNIT_MODEL *Uni, ao5ANIM *Ani )
{
  INT i, j;
  static BOOL ok = TRUE;
  AO5_RndMatrView = MatrView(VecSet(0, 5, 10),
                             VecSet(0, 0, 0),
                             VecSet(0, 1, 0));

  if (Ani->KeysClick['W'])
    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  if (Ani->KeysClick['Q'])
    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  glEnable(GL_DEPTH_TEST);
  if (ok)
    AO5_RndMatrWorld = MatrMulMatr(MatrRotateY(30 * Ani->Time + 180), MatrTranslate(0, -1.5, 0));
  else
    AO5_RndMatrWorld = MatrMulMatr(MatrRotateX(90), MatrRotateZ(90));
  if(Ani->KeysClick['Z'])
	  ok = !ok;
  for (i = 0; i < 1; i++)
    for (j = 0; j < 1; j++)
    {
		
      glColor3d(i & 1, j & 1, 1 - ((i & 1) + (j & 1)) / 2);
      AO5_GeomDraw(&Uni->Model);
    }
  //MatrMulMatr(MatrRotateZ(30 * sin(Ani->Time * 3.0)), MatrRotateY(30 * Ani->Time));
  //AO5_GeomDraw(&Uni->Geom);

  glActiveTexture(GL_TEXTURE0);
  glBindTexture(GL_TEXTURE_2D, Uni->TextId);
  //AO5_PrimDraw(&Uni->Pr);
} /* End of 'AO5_AnimUnitRender' function */
Beispiel #4
0
/* Unit clock inter frame events handle function.
 * ARGUMENTS:
 *   - self-pointer to unit object:
 *       vg4UNIT_CLOCK *Uni;
 *   - animation context:
 *       vg4ANIM *Ani;
 * RETURNS: None.
 */
static VOID VG4_UnitResponse( vg4UNIT_CLOCK *Uni, vg4ANIM *Ani )
{
  DBL r;

  if (Ani->Keys[VK_SPACE])
    VG4_AnimAddUnit(VG4_UnitCreateBall());
  if (Ani->Keys['C'])
    VG4_AnimAddUnit(VG4_UnitCreateCube());
  if (Ani->KeysClick[VK_RETURN] && Ani->Keys[VK_MENU])
    VG4_AnimFlipFullScreen();
  if (Ani->KeysClick[VK_ESCAPE])
    VG4_AnimDoExit();
  if (Ani->KeysClick['P'])
    Ani->IsPause = !Ani->IsPause;


  /* Uni->Pos.Y += Ani->JY * Ani->GlobalDeltaTime; */

  Uni->Pos = VecMulMatr43(Uni->Pos, MatrRotateX(59 * Ani->JY * Ani->GlobalDeltaTime));
  Uni->Pos = VecMulMatr43(Uni->Pos, MatrRotateY(59 * Ani->JX * Ani->GlobalDeltaTime));

  if (Ani->Keys[VK_LBUTTON])
  {
    Uni->Pos = VecMulMatr43(Uni->Pos, MatrRotateY(59 * Ani->Mdx * Ani->GlobalDeltaTime));
    Uni->Pos = VecMulMatr43(Uni->Pos, MatrRotateX(59 * Ani->Mdy * Ani->GlobalDeltaTime));
  }

  Uni->Pos = VecMulMatr43(Uni->Pos, MatrRotateY(59 * Ani->Keys[VK_RIGHT] * Ani->GlobalDeltaTime));
  Uni->Pos = VecMulMatr43(Uni->Pos, MatrRotateY(-59 * Ani->Keys[VK_LEFT] * Ani->GlobalDeltaTime));

  r = VecLen(Uni->Pos);
  Uni->Pos = VecMulNum(Uni->Pos, (r + Ani->Mdz * Ani->DeltaTime * 0.1) / r);

  VG4_RndMatrView = MatrView(Uni->Pos, VecSet(0, 0, 0), VecSet(0, 1, 0));
} /* End of 'VG4_UnitResponse' function */
Beispiel #5
0
VOID IK3_AnimUnit( HWND hWnd )
{
  INT i;
  LARGE_INTEGER t;
  PIXELFORMATDESCRIPTOR pfd = {0};
 
  memset(&IK3_Anim, 0, sizeof(ik3Anim));

  /* Store window and create memory device context */
  IK3_Anim.hWnd = hWnd;
  IK3_Anim.hDC = GetDC(hWnd);
  /* OpenGL init: pixel format setup */
  pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
  pfd.nVersion = 1;
  pfd.dwFlags = PFD_DOUBLEBUFFER | PFD_SUPPORT_OPENGL;
  pfd.cColorBits = 32;
  pfd.cDepthBits = 32;
  i = ChoosePixelFormat(IK3_Anim.hDC, &pfd);
  DescribePixelFormat(IK3_Anim.hDC, i, sizeof(pfd), &pfd);
  SetPixelFormat(IK3_Anim.hDC, i, &pfd);

  /* OpenGL init: setup rendering context */
  IK3_Anim.hGLRC = wglCreateContext(IK3_Anim.hDC);
  wglMakeCurrent(IK3_Anim.hDC, IK3_Anim.hGLRC);

  /* OpenGL init: setup extensions: GLEW library */
  if (glewInit() != GLEW_OK ||
      !(GLEW_ARB_vertex_shader && GLEW_ARB_fragment_shader))
  {
    wglMakeCurrent(NULL, NULL);
    wglDeleteContext(IK3_Anim.hGLRC);
    ReleaseDC(IK3_Anim.hWnd, IK3_Anim.hDC);
    exit(0);
  }

  QueryPerformanceFrequency(&t);
  IK3_TimePerSec = t.QuadPart;
  QueryPerformanceCounter(&t);
  IK3_StartTime = IK3_OldTime = IK3_OldTimeFPS = t.QuadPart;
  IK3_PauseTime = 0;

  IK3_RndMatrWorld  = MatrIdentity();
  IK3_RndMatrView = MatrView(VecSet(0, 1, 0), VecSet(0, 0, 0), VecSet(0, 1, 0));
  IK3_RndMatrProj = MatrFrustum(-1, 1, -1, 1, 1, 100);
  IK3_RndProjDist = 3;
  IK3_RndFarClip = 3000;
  IK3_RndProjSize = 3;
  /* OpenGL specific initialization */
  glClearColor(0.3, 0.5, 0.7, 1);
  glEnable(GL_DEPTH_TEST);
  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  IK3_RndPrg = IK3_RndShaderLoad("a");
  /* glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); */
}
Beispiel #6
0
/* Функция построения объекта анимации.
 * АРГУМЕНТЫ:
 *   - указатель на "себя" - сам объект анимации:
 *       ak1UNIT_BALL *Uni;
 *   - указатель на контекст анимации:
 *       ak1ANIM *Ani;
 * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Нет.
 */
static VOID AK1_AnimCowRender( ak1UNIT_COW *Uni, ak1ANIM *Ani )
{
  int i, l = -1;
  DBL X1 = Ani->PosX;
  AK1_RndMatrWorld = MatrMulMatr(MatrMulMatr(MatrRotateX(Ani->AngleX), MatrRotateY(Ani->AngleY)), MatrScale(10, 10, 10));
  AK1_RndMatrView = MatrView(VecSet(8, 8, 8), VecSet(0, 0, 0), VecSet(0, 1, 0));
  SetDCPenColor(Ani->hDC, RGB(255, 255, 255));
//  AK1_RndGObjDraw(&Uni->Model);
  for (i = 0; i < 3; i++)
  {
    Ani->PosX = X1 + (i + l) * 600;
    AK1_RndGObjDraw(&Uni->Model);
  }
  Ani->PosX = X1;
} /* End of 'ak1_AnimUnitRender' function */
Beispiel #7
0
static VOID MP2_UnitResponse( mp2CONTROL *Uni, mp2ANIM *Ani )
{
  DBL r;
  VEC Dir = VecNormalize(VecSubVec(View, Uni->Pos)),
      Right = VecNormalize(VecCrossVec(Dir, VecSet(0, 1, 0)));
  if (Ani->Keys['T'])
    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  if (Ani->Keys['Y'])
    glPolygonMode(GL_FRONT, GL_LINE);
  if (Ani->Keys['U'])
    glPolygonMode(GL_BACK, GL_LINE);
  /*if (Ani->Keys[VK_SPACE])
    MP2_AnimAddUnit(MP2_UnitCreateBall()); */
  if (Ani->KeysClick['C'])
    MP2_AnimAddUnit(MP2_UnitCreateCube(/*Rnd1() * 4, Rnd1() * 4, Rnd1() * 4*/0, 0, 0));
  if (Ani->KeysClick['V'])
    MP2_AnimAddUnit(MP2_UnitCreateSTATICMODEL(/*Rnd1() * 4, Rnd1() * 4, Rnd1() * 4*/0, 0, 0));
  if (Ani->KeysClick[VK_RETURN] && Ani->Keys[VK_MENU])
    MP2_FlipFullScreen(MP2_Anim.hWnd);
  /*if (Ani->KeysClick[VK_ESCAPE])
    MP2_AnimDoExit();*/
  if (Ani->KeysClick['P'])
    Ani->IsPause = !Ani->IsPause;

  /* Uni->Pos.Y += Ani->JY * Ani->GlobalDeltaTime; */
  Uni->Pos = PointTransform(Uni->Pos, MatrRotate((50 * Ani->JY * Ani->GlobalDeltaTime), Right));
  Uni->Pos = PointTransform(Uni->Pos, MatrRotateY(10 * Ani->JX * Ani->GlobalDeltaTime));
   

  if (Ani->Keys[VK_LBUTTON])
  {
    Uni->Pos = PointTransform(Uni->Pos, MatrRotateY(10 * Ani->Mdx * Ani->GlobalDeltaTime));
    Uni->Pos = PointTransform(Uni->Pos, MatrRotateX(10 * Ani->Mdy * Ani->GlobalDeltaTime));
  }
  View.X += Ani->JZ / 10;
  View.Z += Ani->JR / 10;
  Uni->Pos = PointTransform(Uni->Pos, MatrRotateY(10 * Ani->Keys[VK_RIGHT] * Ani->GlobalDeltaTime));
  Uni->Pos = PointTransform(Uni->Pos, MatrRotateY(-10 * Ani->Keys[VK_LEFT] * Ani->GlobalDeltaTime));

  r = VecLen(Uni->Pos);
  Uni->Pos = VecMulNum(Uni->Pos, (r + (-Ani->Mdz) * Ani->DeltaTime * 1.0) / r);
  
  MP2_RndMatrView = MatrView(VecAddVec(Uni->Pos, View), View, VecSet(0, 1, 0));
}
Beispiel #8
0
/* Функция построения объекта анимации.
 * АРГУМЕНТЫ:
 *   - указатель на "себя" - сам объект анимации:
 *       vg4UNIT_MODEL *Uni;
 *   - указатель на контекст анимации:
 *       vg4ANIM *Ani;
 * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Нет.
 */
static VOID VG4_AnimUnitRender( vg4UNIT_MODEL *Uni, vg4ANIM *Ani )
{
  INT i;

  VG4_RndMatrView = MatrView(VecSet(8, 8, 8),
                             VecSet(0, 0, 0),
                             VecSet(0, 1, 0));

  for (i = 0; i < 8; i++)
  {
    VG4_RndMatrWorld =
      MatrMulMatr(MatrMulMatr(MatrMulMatr(
        MatrTranslate(Ani->JX * 59, Ani->JY * 88, 0),
        MatrScale(0.1, 0.1, 0.1)),
        MatrRotateY(30 * Ani->Time + Ani->JR * 180)),
        MatrTranslate((i - 2) * 2, 0, 100 * Ani->JZ));
    VG4_RndGObjDraw(&Uni->Model);
  }
} /* End of 'VG4_AnimUnitRender' function */
Beispiel #9
0
/* Функция обновления межкадровых параметров объекта анимации.
 * АРГУМЕНТЫ:
 *   - указатель на "себя" - сам объект анимации:
 *       ao5UNIT_CTRL *Uni;
 *   - указатель на контекст анимации:
 *       ao5ANIM *Ani;
 * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Нет.
 */
static VOID AO5_AnimUnitResponse( ao5UNIT_CTRL *Uni, ao5ANIM *Ani )
{
  VEC Move, Dir, At;
  if (Ani->Keys[VK_ESCAPE])
    AO5_AnimDoExit();
  if (Ani->KeysClick['F'])
    AO5_AnimFlipFullScreen();
  if (Ani->KeysClick['P'])
    AO5_AnimSetPause(!Ani->IsPause);
  /* позиционирование корабля */
  //Uni->Omega = -3000 * Ani->JX * Ani->DeltaTime;
  //Uni->Head += -3 * 30 * Ani->JR * Ani->DeltaTime;
  Dir = VectorTransform(VecSet(0, 0, 1), MatrRotateY(Uni->Head));
  //Uni->V += -3 * Ani->JY * Ani->DeltaTime;
  //Uni->V *= max(1 - Ani->GlobalDeltaTime, 0);
  if(Ani->Keys['D'])
    Uni->Head -= 1;
  if(Ani->Keys['A'])
    Uni->Head += 1;
  if(Ani->Keys['W'])
    Uni->V = -5;
  else if(Ani->Keys['S'])
    Uni->V = 5;
  else
    Uni->V = 0;
  Uni->Pos = VecAddVec(Uni->Pos, VecMulNum(Dir, Uni->V * Ani->DeltaTime)); 

  Uni->Pos = VecAddVec(Uni->Pos, VecMulNum(VectorTransform(Dir, MatrRotateY(-90)), Uni->V));
  //Uni->Pos.Y += 30 * (Ani->JButs[1] - Ani->JButs[2]) * Ani->DeltaTime; 

  Uni->At = VecSubVec(Uni->Pos, VecMulNum(Dir, 100));
  Uni->At.Y += 10;
  Move = VecSubVec(Uni->At, Uni->CPos);
  Uni->CPos = VecAddVec(Uni->CPos, VecMulNum(Move, Ani->DeltaTime));
  AO5_RndMatrView = MatrView(Uni->CPos,
                             Uni->Pos,
                             VecSet(0, 1, 0)); 
  AO5_RndMatrWorld = MatrMulMatr(MatrMulMatr(MatrRotateY(Uni->Head), MatrTranslate(Uni->Pos.X, Uni->Pos.Y, Uni->Pos.Z)), MatrScale(0.1, 0.1, 0.1)); 
} /* End of 'AO5_AnimUnitResponse' function */
Beispiel #10
0
/* Функция обновления межкадровых параметров объекта анимации.
 * АРГУМЕНТЫ:
 *   - указатель на "себя" - сам объект анимации:
 *       vg4UNIT_CTRL *Uni;
 *   - указатель на контекст анимации:
 *       vg4ANIM *Ani;
 * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Нет.
 */
static VOID VG4_AnimUnitResponse( vg4UNIT_CTRL *Uni, vg4ANIM *Ani )
{
  VEC Dir, Move;
  static FLT y = -0.067452297, z = 2.6340842;
  static DBL time = 5;

  time += VG4_Anim.GlobalDeltaTime;
  if (time > 5)
  {
    time = 0;
    VG4_ShaderFree(Uni->Axes.ProgId);
    VG4_ShaderFree(Uni->Helic.ProgId);
    Uni->Helic.ProgId = VG4_ShaderLoad("HELIC");
    Uni->Axes.ProgId = VG4_ShaderLoad("AXIS");
    Uni->Sph.ProgId = Uni->Axes.ProgId;
  }

  /* позиционирование вертолета */
  Uni->Omega = -3000 * Ani->JR * Ani->DeltaTime;
  Uni->Head += -3 * 30 * Ani->JR * Ani->DeltaTime;

  Dir = VecMulMatr3(VecSet(0, 0, 1), MatrRotateY(Uni->Head));

  Uni->V += -30 * Ani->JY * Ani->DeltaTime;
  Uni->V *= max(1 - Ani->GlobalDeltaTime, 0);
  Uni->Pos = VecAddVec(Uni->Pos, VecMulNum(Dir, Uni->V * Ani->DeltaTime));

  Uni->Pos = VecAddVec(Uni->Pos, VecMulNum(VecMulMatr3(Dir, MatrRotateY(-90)), 30 * Ani->JX * Ani->DeltaTime));

  Uni->Pos.Y += 30 * (Ani->JButs[1] - Ani->JButs[2]) * Ani->DeltaTime;

  /* точка "интереса" */
  Uni->At = VecSubVec(Uni->Pos, VecMulNum(Dir, 9));
  Uni->At.Y += 5.30;

  Move = VecSubVec(Uni->At, Uni->CPos);
  Uni->CPos = VecAddVec(Uni->CPos, VecMulNum(Move, Ani->DeltaTime));



  VG4_RndMatrView = MatrView(Uni->CPos,
                             Uni->Pos,
                             VecSet(0, 1, 0));

  if (Ani->KeysClick['W'])
    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  if (Ani->KeysClick['Q'])
    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  if (Ani->Keys[VK_ESCAPE])
    VG4_AnimDoExit();
  if (Ani->KeysClick['F'])
    VG4_AnimFlipFullScreen();
  if (Ani->KeysClick['P'])
    VG4_AnimSetPause(!Ani->IsPause);

  /* анимация вертолета */
  Uni->Helic.Prims[2].M = MatrRotateY(999 * Ani->Time);
  Uni->Helic.Prims[4].M = MatrMulMatr(MatrMulMatr(MatrTranslate(0, y, z), MatrRotateX(888 * Ani->Time)), MatrTranslate(0, -y, -z));
  y += Ani->Keys[VK_ADD] * Ani->GlobalDeltaTime * 0.1 - Ani->Keys[VK_SUBTRACT] * Ani->GlobalDeltaTime * 0.1;
  z += Ani->Keys['A'] * Ani->GlobalDeltaTime * 0.1 - Ani->Keys['Z'] * Ani->GlobalDeltaTime * 0.1;
} /* End of 'VG4_AnimUnitResponse' function */
Beispiel #11
0
/* Функция построения объекта анимации.
* АРГУМЕНТЫ:
*   - указатель на "себя" - сам объект анимации:
*       as3UNIT_MODEL *Uni;
*   - указатель на контекст анимации:
*       as3ANIM *Ani;
* ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Нет.
*/
static VOID AS3_AnimUnitRender(as3UNIT_MODEL *Uni, as3ANIM *Ani)
{
    static INT i = 0, j = 0, k = 0;
    if (Ani->JR > 0)
        k += 105;
    if (Ani->JR < -0.0002)
        k -= 105;
    if (Ani->JZ > 0)
        i += 105;
    if (Ani->JZ < -0.0002)
        i -= 105;
    if (Ani->JY > 0)
        j += 1000;
    AS3_RndMatrView = MatrView(VecSet(600 + k, 600 + k, 600 + k), VecSet(i, 0, i), VecSet(0, 1, 0));


    if (Ani->KeysClick['W'])
        glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
    if (Ani->KeysClick['Q'])
        glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
    if (Ani->KeysClick['S'])
        j = 1;
    glEnable(GL_DEPTH_TEST);
    AS3_RndMatrWorld =
        MatrMulMatr(MatrMulMatr(MatrMulMatr(
                                    MatrRotate(0.00001141552511 * 365 * j * Ani->Time, 0, 1, 0),  //Земля
                                    MatrScale(100, 100, 100)),
                                MatrTranslate(0, -50, 1200)),
                    MatrRotateY(0.00001141552511 * j * Ani->Time));
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, Uni->TextId);
    AS3_GeomDraw(&Uni->Geom[0]);
    AS3_RndMatrWorld =
        MatrMulMatr(MatrMulMatr(MatrMulMatr(
                                    MatrRotate(0, 0, 1, 0),  //Солнце
                                    MatrScale(800, 800, 800)),
                                MatrTranslate(0, 0, 0)),
                    MatrRotateY(0));
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, Uni->TextId1);
    AS3_GeomDraw(&Uni->Geom[1]);
    AS3_RndMatrWorld =
        MatrMulMatr(MatrMulMatr(MatrMulMatr(
                                    MatrRotate(0.6 * 0.0004 * j *  Ani->Time, 0, 1, 0),  //Меркурий
                                    MatrScale(30, 30, 30)),
                                MatrTranslate(0, 0, 800)),
                    MatrRotateY(0.0004 * j * Ani->Time));
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, Uni->TextId2);
    AS3_GeomDraw(&Uni->Geom[2]);
    AS3_RndMatrWorld =
        MatrMulMatr(MatrMulMatr(MatrMulMatr(
                                    MatrRotate(-1.1 * 0.0001 * j * Ani->Time, 0, 1, 0),  //Венера
                                    MatrScale(100, 100, 100)),
                                MatrTranslate(0, 0, 1000)),
                    MatrRotateY(0.0001 * j * Ani->Time));
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, Uni->TextId3);
    AS3_GeomDraw(&Uni->Geom[3]);
    AS3_RndMatrWorld =
        MatrMulMatr(MatrMulMatr(MatrMulMatr(
                                    MatrRotate(669 * 0.000006 * j * Ani->Time, 0, 1, 0),  //Марс
                                    MatrScale(90, 90, 90)),
                                MatrTranslate(0, 0, 1500)),
                    MatrRotateY(0.000006 * j * Ani->Time));
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, Uni->TextId4);
    AS3_GeomDraw(&Uni->Geom[4]);
    AS3_RndMatrWorld =
        MatrMulMatr(MatrMulMatr(MatrMulMatr(
                                    MatrRotate(10683 * 0.0000009 * j * Ani->Time, 0, 1, 0),  //Юпитер
                                    MatrScale(500, 500, 500)),
                                MatrTranslate(0, 0, 1800)),
                    MatrRotateY(0.0000009 * j * Ani->Time));
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, Uni->TextId5);
    AS3_GeomDraw(&Uni->Geom[5]);
    AS3_RndMatrWorld =
        MatrMulMatr(MatrMulMatr(MatrMulMatr(
                                    MatrRotate(21170 * 0.0000004 * j * Ani->Time, 0, 1, 0),  //Сатурн
                                    MatrScale(400, 400, 400)),
                                MatrTranslate(0, 0, 2500)),
                    MatrRotateY(0.0000004 * j * Ani->Time));
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, Uni->TextId6);
    AS3_GeomDraw(&Uni->Geom[6]);
    /*
    AS3_RndMatrWorld =
        MatrMulMatr(MatrMulMatr(MatrMulMatr(
        MatrRotate(100 * Ani->Time, 0, 1, 0),  //0.004050925925925926
        MatrScale(10, 8, 10)),
        MatrTranslate(0, 0, 2500)),
        MatrRotateX(-90));
      glActiveTexture(GL_TEXTURE0);
      glBindTexture(GL_TEXTURE_2D, Uni->TextId61);
      AS3_GeomDraw(&Uni->Geom[7]);
    */
    AS3_RndMatrWorld =
        MatrMulMatr(MatrMulMatr(MatrMulMatr(
                                    MatrRotate(43800 * 0.0000001 * j * Ani->Time, 0, 1, 0),  //Уран
                                    MatrScale(350, 350, 350)),
                                MatrTranslate(0, 0, 3000)),
                    MatrRotateY(0.0000001 * j * Ani->Time));
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, Uni->TextId7);
    AS3_GeomDraw(&Uni->Geom[8]);
    AS3_RndMatrWorld =
        MatrMulMatr(MatrMulMatr(MatrMulMatr(
                                    MatrRotate(86036 * 0.00000007 * j * Ani->Time, 0, 1, 0),  //Нептун
                                    MatrScale(350, 350, 350)),
                                MatrTranslate(0, 0, 3500)),
                    MatrRotateY(0.00000007 * j * Ani->Time));
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, Uni->TextId8);
    AS3_GeomDraw(&Uni->Geom[9]);
    AS3_RndMatrWorld =
        MatrMulMatr(MatrMulMatr(MatrMulMatr(
                                    MatrRotate(0, 0, 1, 0),  // nebo
                                    MatrScale(20000, 20000, 20000)),
                                MatrTranslate(0, 0, 0)),
                    MatrRotateY(0));
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, Uni->TextId9);
    AS3_GeomDraw(&Uni->Geom[10]);

} /* End of 'AS3_AnimUnitRender' function */