2012-03-28 20 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エラーをチェックする必要があります。報告されたエラーがあれば、それはデバッグプロセスの最初のステップでなければなりません。

また、各コマンドのmanページに慣れ、彼らはあなたがそれらを使用する方法を理解するのに役立つことができます。

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

関連する問題