Example #1
0
/* Begin of 'WinMain' function */
INT WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, CHAR *CmdLine, INT ShowCmd )
{
  MATR m =
  {{
    {2, 0, 0, 0},
    {1, 2, 0, 0},
    {1, 1, 2, 0},
    {1, 1, 1, 2}
  }};
  DBL g;

  m = MatrIdentity();
  m = MatrTranslate(VecSet(1, 2, 3));
  m = MatrScale(VecSet(1, 2, 3));
  m = MatrRotateX(30);
  m = MatrRotateY(30);
  m = MatrRotateZ(30);
  m = MatrRotate(30, VecSet(1, 2, 3));
  m = MatrMulMatr(MatrRotateX(90), MatrScale(VecSet(2, 2, 2)));
  m = MatrInverse(m);
  g = MatrDeterm(m);
  m = MatrTranspose(m);

  return 0;
}/* Begin of 'WinMain' function */
Example #2
0
static VOID DrawUnitInPosition( ok2GEOM *Geo, ok2ANIM *Ani, FLT Scale, FLT Rad, FLT Angle )
{
  FLT unscale = 1.0 / Scale;
                                                                             
  Ani->MatrWorld = MatrMulMatr(MatrRotate(Angle, 0.0, 1.0, 0.0), Ani->MatrWorld);
  Ani->MatrWorld = MatrMulMatr(MatrTranslate(Rad, 0.0, 0.0), Ani->MatrWorld);
  Ani->MatrWorld = MatrMulMatr(Ani->MatrWorld, MatrScale(Scale, Scale, Scale));
  OK2_GeomDraw(Geo);
  Ani->MatrWorld = MatrMulMatr(Ani->MatrWorld, MatrScale(unscale, unscale, unscale));
  Ani->MatrWorld = MatrMulMatr(MatrTranslate(-Rad, 0.0, 0.0), Ani->MatrWorld);
  //Ani->MatrWorld = MatrMulMatr(MatrRotate(-Angle, 0.0, 1.0, 0.0), Ani->MatrWorld);
}
Example #3
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));
}
Example #4
0
/* ‘ункци¤ построени¤ объекта анимации.
 * ј–√”ћ≈Ќ“џ:
 *   - указатель на "себ¤" - сам объект анимации:
 *       ok2UNIT_CUBE *Unit;
 *   - указатель на контекст анимации:
 *       ok2ANIM *Ani;
 * ¬ќ«¬–јўј≈ћќ≈ «Ќј„≈Ќ»≈: Ќет.
 */
static VOID CubeUnitRender( ok2UNIT_CUBE *Unit, ok2ANIM *Ani )
{                                                               
  /*
  INT i, s = 5, N = 0;
  VEC p = {1, 0, 0};

  static FLT Delta = 0.1;
  MATR WVP;

  Delta += Ani->JZ * Ani->GlobalDeltaTime;

  //Ani->MatrWorld = MatrRotateY(30);
  //Ani->MatrView = MatrLookAt(VecSet(15, 15, 15), VecSet(0, 0, 0), VecSet(0, 1, 0));
  Ani->MatrView = MatrLookAt(PointTransform(VecSet(20, 20, Ani->JX * Delta + 20), MatrRotateX(80 * Ani->JY)), VecSet(0, 0, 0), VecSet(0, 1, 0));
  Ani->MatrWorld = MatrMulMatr(Ani->MatrWorld, MatrRotateX(Ani->DeltaTime * 80));
  

  for (i = 0; i < 12; i++)
  {
    
    Ani->MatrWorld = MatrMulMatr(MatrTranslate(0.0, 5.0, 0.0), Ani->MatrWorld);
    Ani->MatrWorld = MatrMulMatr(MatrRotate(30, 1.0, 0.0, 1.0), Ani->MatrWorld);
    
    WVP = MatrMulMatr(Ani->MatrWorld,
      MatrMulMatr(Ani->MatrView, Ani->MatrProjection));
    glLoadMatrixf(WVP.A[0]);
    OK2_RndGObjDraw(&Unit->Cow, Ani->hDC);
  }
  
  //OK2_RndGObjDraw(&Unit->Cow, Ani->hDC); 
  
  */

  
  INT i;
  MATR WVP;
  static DBL time;

  /* оси и позици¤ наблюдател¤ */
  Ani->MatrWorld = MatrIdenity();
  Ani->MatrView =
    MatrLookAt(
    PointTransform(PointTransform(VecSet(25, 25, 25), MatrRotateY(Ani->JR * 180)), MatrRotateZ(Ani->JY * 180)),
      VecSet(0, 0, 0), VecSet(0, 1, 0));
  WVP = MatrMulMatr(OK2_Anim.MatrWorld, MatrMulMatr(OK2_Anim.MatrView, OK2_Anim.MatrProjection));
  glLoadMatrixf(WVP.A[0]);

  glLineWidth(3);
  glBegin(GL_LINES);
    glColor3d(1, 0.5, 0.5);
    glVertex3d(-3, 0, 0);
    glVertex4d(1, 0, 0, 0);
    glColor3d(0.5, 1, 0.5);
    glVertex3d(0, -3, 0);
    glVertex4d(0, 1, 0, 0);
    glColor3d(0.5, 0.5, 1);
    glVertex3d(0, 0, -3);
    glVertex4d(0, 0, 1, 0);
  glEnd();
  glColorMask(1, 1, 1, 0);
  for (i = -3; i < 30; i++)
  {
    glBegin(GL_TRIANGLE_STRIP);
    glVertex3d(-0.1, -0.1, i);
    glVertex3d(-0.1,  0.1, i);
    glVertex3d( 0.1, -0.1, i);
    glVertex3d( 0.1,  0.1, i);
    glEnd();
  }

  /* –исуем примитивы */
  time += Ani->GlobalDeltaTime;
  if (time > 1)
  {
    time = 0;
    OK2_ShadProgClose(OK2_ShaderProg);
    OK2_ShaderProg = OK2_ShadProgInit("a.vert", "a.frag");
  }


  glLineWidth(1);
  if (Ani->Keys['Q'])
    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  else
    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

  //Ani->MatrWorld = MatrTranslate(0, 0, 0.30 * sin(Ani->Time));
  Ani->MatrWorld = MatrMulMatr(Ani->MatrWorld, MatrRotateY(30.0 * Ani->Time));
  /*
  for (i = 0; i < 12; i++)
  {
    Ani->MatrWorld = MatrMulMatr(MatrRotate(30.0, 0.0, 1.0, 0.0), Ani->MatrWorld);
    Ani->MatrWorld = MatrMulMatr(MatrTranslate(1.0, 0.0, 0.0), Ani->MatrWorld);
    OK2_GeomDraw(&Unit->Geom);
  }
  */
  /*
  for (i = 0; i < 6; i++)
    DrawUnitInPosition(&Unit->Geom[i], Ani, Unit->Scale`[i], 10.0, 30.0);
  */
  Ani->MatrWorld = MatrMulMatr(Ani->MatrWorld, MatrScale(0.001, 0.001, 0.001));

  for (i = 0; i < 12; i++)
  {
    Ani->MatrWorld = MatrMulMatr(MatrRotate(30.0, 0.0, 1.0, 0.0), Ani->MatrWorld);
    Ani->MatrWorld = MatrMulMatr(MatrTranslate(20000.0, 0.0, 0.0), Ani->MatrWorld);
    //Ani->MatrWorld = MatrMulMatr(MatrRotate(30.0, 0.0, 1.0, 0.0), Ani->MatrWorld);
    OK2_GeomDraw(&Unit->Geom[3]);
    Ani->MatrWorld = MatrMulMatr(MatrTranslate(-20000.0, 0.0, 0.0), Ani->MatrWorld);
    
  }
  //Ani->MatrWorld = MatrMulMatr(Ani->MatrWorld, MatrScale(50, 50, 50));
   
} /* End of 'OK2_AnimUnitRender' function */
Example #5
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 */