示例#1
0
文件: ANIM.C 项目: SDWT/SUM2016
/* 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 */
示例#2
0
/* Функция обработки изменения размера области вывода.
 * АРГУМЕНТЫ:
 *   - новый размер области вывода:
 *       INT W, H;
 * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Нет.
 */
VOID VG4_AnimResize( INT W, INT H )
{
    HDC hDC = GetDC(VG4_Anim.hWnd);

    /* Перевыделение памяти у буфера кадра */
    DeleteObject(VG4_Anim.hBmFrame);
    VG4_Anim.hBmFrame = CreateCompatibleBitmap(hDC, W, H);
    SelectObject(VG4_Anim.hDC, VG4_Anim.hBmFrame);

    /* Сохранение размера */
    VG4_Anim.W = W;
    VG4_Anim.H = H;

    ReleaseDC(VG4_Anim.hWnd, hDC);


    /* корректировка параметров проецирования */
    if (W > H)
        VG4_RndWp = (DBL)W / H * 3, VG4_RndHp = 3;
    else
        VG4_RndHp = (DBL)H / W * 3, VG4_RndWp = 3;

    VG4_RndMatrProj = MatrFrustum(-VG4_RndWp / 2, VG4_RndWp / 2,
                                  -VG4_RndHp / 2, VG4_RndHp / 2,
                                  VG4_RndProjDist, 800);

} /* End of 'VG4_AnimResize' function */
示例#3
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); */
}
示例#4
0
VOID AL5_AnimInit( HWND hWnd )
{ 
  INT i;
  PIXELFORMATDESCRIPTOR pfd = {0};

  LARGE_INTEGER t;
  
 
  AL5_Anim.NumOfUnits = 0;
  
  memset(&AL5_Anim, 0, sizeof(al5ANIM));
  AL5_Anim.hWnd = hWnd;
  AL5_Anim.hDC = GetDC(hWnd);

    /*** openGl ***/
  pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
  pfd.nVersion = 1;
  pfd.dwFlags = PFD_DOUBLEBUFFER | PFD_SUPPORT_OPENGL;
  pfd.cColorBits = 32;
  pfd.cDepthBits = 32;
  i = ChoosePixelFormat(AL5_Anim.hDC, &pfd);
  DescribePixelFormat(AL5_Anim.hDC, i, sizeof(pfd), &pfd);
  SetPixelFormat(AL5_Anim.hDC, i, &pfd);
    /* OpenGL init: setup rendering context */
  AL5_Anim.hGLRC = wglCreateContext(AL5_Anim.hDC);
  wglMakeCurrent(AL5_Anim.hDC, AL5_Anim.hGLRC);
  /* OpenGL init: setup extensions: GLEW library */
  if (glewInit() != GLEW_OK ||
      !(GLEW_ARB_vertex_shader && GLEW_ARB_fragment_shader))
  {
    wglMakeCurrent(NULL, NULL);
    wglDeleteContext(AL5_Anim.hGLRC);
    ReleaseDC(AL5_Anim.hWnd, AL5_Anim.hDC);
    exit(0);
  }

    /*** init timer ***/
  QueryPerformanceFrequency(&t);
  AL5_TimePerSec = t.QuadPart;
  QueryPerformanceCounter(&t);
  AL5_StartTime = AL5_OldTime = AL5_OldTimeFPS = t.QuadPart;
  AL5_PauseTime = 0;

  AL5_RndMatrProj = MatrFrustum(-1, 1, -1, 1, 1, 100);
  AL5_RndMatrWorld = MatrIdentity();
  AL5_RndMatrView  = MatrMulMatr(MatrIdentity(), MatrTranslate(VecSet(-1, -1, 0)));

  /* OpenGL specific initialization */
  glClearColor(0.3, 0.5, 0.7, 1);
  glEnable(GL_DEPTH_TEST );
  /* glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); */

  AL5_RndPrg = AL5_RndShaderLoad("a");
}
示例#5
0
/* Setup projection function.
 * ARGUMENTS: None.
 * RETURNS: None.
 */
VOID VG4_RndSetProj( VOID )
{
    DBL ratio_x = 1, ratio_y = 1;

    if (VG4_Anim.W >= VG4_Anim.H)
        ratio_x = (DBL)VG4_Anim.W / VG4_Anim.H;
    else
        ratio_y = (DBL)VG4_Anim.H / VG4_Anim.W;

    VG4_RndMatrProj = MatrFrustum(-ratio_x * VG4_RndProjSize / 2,
                                  ratio_x * VG4_RndProjSize / 2,
                                  -ratio_y * VG4_RndProjSize / 2,
                                  ratio_y * VG4_RndProjSize / 2,
                                  VG4_RndProjDist, VG4_RndFarClip);
} /* End of 'VG4_RndSetProj' function */
示例#6
0
/* Setup projection function.
 * ARGUMENTS: None.
 * RETURNS: None.
 */
VOID MM3_RndSetProj( VOID )
{
  DBL ratio_x = 1, ratio_y = 1;

  if (MM3_Anim.W >= MM3_Anim.H)
    ratio_x = (DBL)MM3_Anim.W / MM3_Anim.H;
  else
    ratio_y = (DBL)MM3_Anim.H / MM3_Anim.W;

  MM3_RndMatrProj = MatrFrustum(-ratio_x * MM3_RndProjSize / 2,
                                 ratio_x * MM3_RndProjSize / 2,
                                -ratio_y * MM3_RndProjSize / 2,
                                 ratio_y * MM3_RndProjSize / 2,
                                 MM3_RndProjDist, MM3_RndFarClip);
} /* End of 'VG4_RndSetProj' function */
示例#7
0
文件: ANIM.C 项目: Ppasha9/SUM2015
/* Функция обработки изменения размера области вывода.
 * АРГУМЕНТЫ:
 *   - новый размер области вывода:
 *       INT W, H;
 * ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Нет.
 */
VOID PD6_AnimResize( INT W, INT H )
{
  HDC hDC = GetDC(PD6_Anim.hWnd);

  /* Перевыделение памяти у буфера кадра */
  DeleteObject(PD6_Anim.hBmFrame);
  PD6_Anim.hBmFrame = CreateCompatibleBitmap(hDC, W, H);
  SelectObject(PD6_Anim.hDC, PD6_Anim.hBmFrame);

  /* Сохранение размера */
  PD6_Anim.W = W;
  PD6_Anim.H = H;

  ReleaseDC(PD6_Anim.hWnd, hDC);

  if (W > H)
    PD6_RndWp = (DBL)W / H * 3, PD6_RndHp = 3;
  else
    PD6_RndHp = (DBL)H / W * 3, PD6_RndWp = 3;

  PD6_RndMatrProj = MatrFrustum(-PD6_RndWp / 2, PD6_RndWp / 2, -PD6_RndHp / 2, PD6_RndHp / 2, PD6_RndProjDist, 800);
} /* End of 'PD6_AnimResize' function */
/* Animation system functions */
BOOL BG3_AnimInit( HWND hWnd )
{
  PIXELFORMATDESCRIPTOR pfd = {0};
  LARGE_INTEGER timeFreq;
  LARGE_INTEGER time;
  POINT cursorPoint;
  INT i;
  HDC winDC;
  // Create context
  BG3_ANIM.hWnd = hWnd;
  winDC = GetDC(hWnd);
  BG3_ANIM.hDC = winDC;

  /* Ñîçäàíèå ñöåíû */

  /* OPEN GL */
  /*** èíèöèàëèçàöèÿ OpenGL ***/
  pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
  pfd.dwFlags = PFD_SUPPORT_OPENGL | PFD_SUPPORT_GDI | PFD_DOUBLEBUFFER;
  pfd.iPixelType = PFD_TYPE_RGBA;
  pfd.cColorBits = 32;
  pfd.cDepthBits = 24;
  pfd.cStencilBits = 0;

  i = ChoosePixelFormat(BG3_ANIM.hDC, &pfd);
  DescribePixelFormat(BG3_ANIM.hDC, i, sizeof(PIXELFORMATDESCRIPTOR), &pfd);
  SetPixelFormat(BG3_ANIM.hDC, i, &pfd);

  BG3_ANIM.hGLRC = wglCreateContext(BG3_ANIM.hDC);
  wglMakeCurrent(BG3_ANIM.hDC, BG3_ANIM.hGLRC);
  ReleaseDC(BG3_ANIM.hWnd, BG3_ANIM.hDC);

  /* óñòàíîâêà áàçîâûõ ïàðàìåòðîâ OpenGL */
  if (glewInit() != GLEW_OK)
  {
    ReleaseDC(BG3_ANIM.hWnd, BG3_ANIM.hDC);
    wglMakeCurrent(NULL, NULL);
    wglDeleteContext(BG3_ANIM.hGLRC);
    memset(&BG3_ANIM, 0, sizeof(BG3_ANIM));
    return FALSE;
  }
  glClearColor(0.3, 0.5, 0.7, 1);
  
  BG3_SceneCreate(&BG3_ANIM);

  /* Get input state */
  memset(&BG3_ANIM.keyState, 0, sizeof(BG3_ANIM.keyState));
  memset(&BG3_ANIM.mouse, 0, sizeof(BG3_ANIM.mouse));
  memset(&BG3_ANIM.timer, 0, sizeof(BG3_ANIM.timer));
  memset(&BG3_ANIM.joy, 0, sizeof(BG3_ANIM.joy));

  /* Camera */
  BG3_ANIM.camera.Wh = 2;
  BG3_ANIM.camera.Hh = 2;
  BG3_ANIM.camera.PD = 1;
  BG3_ANIM.camera.projMatr = MatrFrustum(-BG3_ANIM.camera.Wh/2, BG3_ANIM.camera.Wh/2, -BG3_ANIM.camera.Hh/2, BG3_ANIM.camera.Hh/2, 1, 10000);

  /* Mouse position */
  GetCursorPos(&cursorPoint);
  // Convert to window
  ScreenToClient(hWnd, &cursorPoint);
  BG3_ANIM.mouse.x = cursorPoint.x;
  BG3_ANIM.mouse.y = cursorPoint.y;

  /* Timer state */
  QueryPerformanceFrequency(&timeFreq);
  QueryPerformanceCounter(&time);
  BG3_ANIM.timer.animStart = ((DBL)time.QuadPart / timeFreq.QuadPart);

  memset(&BG3_ANIM.mouse, 0, sizeof(BG3_ANIM.mouse));

  // Init units
  for (i = 0; i < BG3_ANIM.unitsNum; i++)
  {
BG3_ANIM.units[i]->Init(BG3_ANIM.units[i], &BG3_ANIM);
  }

  BG3_IsInit = TRUE;
  return TRUE;
}