2012-03-28 4 views
-2

저는 dev-C++ IDE에서 OpenGL with C++을 사용하고 있습니다. 원을 그릴 때 아무 일도 일어나지 않습니다. 무엇이 잘못 될 수 있습니까?OpenGL 그리기 없음

int WINAPI WinMain (HINSTANCE hInstance, 
        HINSTANCE hPrevInstance, 
        LPSTR lpCmdLine, 
        int iCmdShow) 
{ 
    WNDCLASS wc; 
    HWND hWnd; 
    HDC hDC; 
    HGLRC hRC;   
    MSG msg; 
    BOOL bQuit = FALSE; 
    float theta = 0.0f; 

    /* register window class */ 
    wc.style = CS_OWNDC; 
    wc.lpfnWndProc = WndProc; 
    wc.cbClsExtra = 0; 
    wc.cbWndExtra = 0; 
    wc.hInstance = hInstance; 
    wc.hIcon = LoadIcon (NULL, IDI_APPLICATION); 
    wc.hCursor = LoadCursor (NULL, IDC_ARROW); 
    wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH); 
    wc.lpszMenuName = NULL; 
    wc.lpszClassName = "GLSample"; 
    RegisterClass (&wc); 

    /* create main window */ 
    hWnd = CreateWindow (
     "GLSample", "OpenGL Sample", 
     WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE, 
     0, 0, 768, 512, 
     NULL, NULL, hInstance, NULL); 

    /* enable OpenGL for the window */ 
    EnableOpenGL (hWnd, &hDC, &hRC); 

    /* program main loop */ 
    while (!bQuit) 
    { 
     /* check for messages */ 
     if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE)) 
     { 
      /* handle or dispatch messages */ 
      if (msg.message == WM_QUIT) 
      { 
       bQuit = FALSE; 
      } 
      else 
      { 
       TranslateMessage (&msg); 
       DispatchMessage (&msg); 
      } 
     } 
     else 
     { 
      /* OpenGL animation code goes here */ 

      glClearColor (0.0f, 0.0f, 0.0f, 0.0f); 
      glClear (GL_COLOR_BUFFER_BIT); 

      glPushMatrix(); 

      circle(30,30,20,3); 


      glPopMatrix(); 

      SwapBuffers (hDC); 

     } 
    } 

    /* shutdown OpenGL */ 
    DisableOpenGL (hWnd, hDC, hRC); 

    /* destroy the window explicitly */ 
    DestroyWindow (hWnd); 

    return msg.wParam; 
} 
void circle(float x, float y, float r, int segments) 
{ 
    glBegin(GL_TRIANGLE_FAN); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); 
     glVertex2f(x, y); 
     for(int n = 0; n <= segments; ++n) { 
      float const t = 2*M_PI*(float)n/(float)segments; 
      glVertex2f(x + sin(t)*r, y + cos(t)*r); 
     } 
    glEnd(); 
} 

답변

2

먼저 제한된 호출을 glBegin() 블록 안에 넣을 수 없습니다. (glMatrixMode, glLoadIdentity, glOrtho 등). 코드의 여러 위치에서 glGetError를 사용하여 OpenGL 오류를 검사해야합니다. 오류가보고 된 경우 (그리고 확실하게) 디버깅 프로세스의 첫 번째 단계가되어야합니다.

은 또한 각 명령에 대한 매뉴얼 페이지에 익숙해, 그들은 당신이 그들을 사용하는 방법을 이해하는 데 도움이 :

http://www.opengl.org/sdk/docs/man/xhtml/glBegin.xml