OpenGL рисования не происходит - PullRequest
0 голосов
/ 29 марта 2012

Я использую OpenGL с C ++ в dev-c ++ IDE.Когда я рисую круг, ничего не происходит, что может быть не так?

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();
}

1 Ответ

2 голосов
/ 29 марта 2012

Прежде всего вы не можете помещать ограниченные вызовы внутри блока glBegin ().(glMatrixMode, glLoadIdentity, glOrtho и т. д.).Вы должны начать проверять ошибки opengl с glGetError в нескольких местах в вашем коде.Если у вас есть какие-либо сообщения об ошибках (и вы, безусловно, делаете), это должно быть первым шагом в любом процессе отладки.

Также ознакомьтесь со справочными страницами для каждой команды, они помогут вам понять, как их использовать:

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

...