Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Помогите запустить простой пример OpenGL


Автор: sergeydr 10.10.2012, 00:12
Запускаю найденый код из Dev-C++:
Код

// OpenGL 3D program.

#include <windows.h>
#include <GL\gl.h>
#include <GL\glu.h>

// заголовки функций
void SetDCPixelFormat(HWND,HDC);
void Initialize(HWND);
void DrawScene(HDC);
LONG WINAPI WndProc(HWND, UINT, WPARAM, LPARAM);

// главная функция
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    LPSTR lpszCmdLine, int nCmdShow)
{
    static char szAppName[] = "3D APP";
    WNDCLASS wc;
    HWND hwnd;
    MSG msg;

    wc.style = 0;
    wc.lpfnWndProc = (WNDPROC) WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon(NULL, NULL);
    wc.hCursor = (HCURSOR)LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
    wc.lpszMenuName = NULL;
    wc.lpszClassName = szAppName;

    RegisterClass (&wc);

    hwnd = CreateWindow (szAppName, szAppName,
        WS_SYSMENU,
        0, 0, 500, 500,
        HWND_DESKTOP, NULL, hInstance, NULL);

    ShowWindow (hwnd, SW_SHOW);
    UpdateWindow (hwnd);

    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage (&msg);
        DispatchMessage (&msg);
    }
    return msg.wParam;
}


// оконная процедура
LONG WINAPI WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    static HDC hdc;
    static HGLRC hrc;
    PAINTSTRUCT ps;

    switch (msg) {

    case WM_CREATE:
        hdc = GetDC (hwnd);
        SetDCPixelFormat (hwnd,hdc);
        hrc = wglCreateContext (hdc);
        wglMakeCurrent (hdc, hrc);
        Initialize(hwnd);
        return 0;

    case WM_PAINT:
        // Draw the scene.
        BeginPaint (hwnd, &ps);
        DrawScene (hdc);
        EndPaint (hwnd, &ps);

        InvalidateRect(hwnd, NULL, FALSE);

        return 0;;

    case WM_DESTROY:
        // Clean up and terminate.
        wglMakeCurrent (NULL, NULL);
        wglDeleteContext (hrc);
        ReleaseDC (hwnd, hdc);
        PostQuitMessage (0);
        return 0;
    }
    return DefWindowProc (hwnd, msg, wParam, lParam);
}


// установка параметров
void SetDCPixelFormat (HWND hwnd,HDC hdc)
{
    int nPixelFormat;
    static PIXELFORMATDESCRIPTOR pfd = {
        sizeof (PIXELFORMATDESCRIPTOR),
        1,
        PFD_DRAW_TO_WINDOW |
        PFD_SUPPORT_OPENGL |
        PFD_GENERIC_ACCELERATED|
        PFD_DOUBLEBUFFER,
        PFD_TYPE_RGBA,
        24,
        0, 0, 0, 0, 0, 0,
        0, 0,
        0, 0, 0, 0, 0,
        32,
        0,
        0,
        PFD_MAIN_PLANE,
        0,
        0, 0, 0
    };

    nPixelFormat = ChoosePixelFormat (hdc, &pfd);
    SetPixelFormat (hdc, nPixelFormat, &pfd);

}

void Initialize(HWND hwnd)
{
    RECT rect;

    GetClientRect(hwnd, &rect);
    glViewport(0,0,rect.right, rect.bottom);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective (40.0, rect.right/rect.bottom, 1.0f, 1000.0f);

    return;
}

void DrawScene(HDC hdc)
{
    static float angle;
    angle += 1.0f;

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glTranslatef(0.0, 0.0, -2.0);
    glRotatef(angle,0.0, 1.0, 0.0);

    glBegin(GL_TRIANGLES);
        glColor3f(1.0, 0.0, 0.0);
        glVertex3f(-0.5, -0.5, 0.0);

        glColor3f(0.0, 1.0, 1.0);
        glVertex3f(0.5, -0.5, 0.0);

        glColor3f(0.0, 0.0, 1.0);
        glVertex3f(0.0, 0.5, 0.0);
    glEnd();

    glFlush();

    SwapBuffers(hdc);
    return;
}



Появляются следующие ошибки:
  [Linker error] undefined reference to `wglCreateContext@4'
  [Linker error] undefined reference to `wglMakeCurrent@8'
  [Linker error] undefined reference to `wglDeleteContext@4'
  [Linker error] undefined reference to `glViewport@16'
  [Linker error] undefined reference to `glMatrixMode@4'
  [Linker error] undefined reference to `glLoadIdentity@0'
  [Linker error] undefined reference to `gluPerspective@32'
  [Linker error] undefined reference to `glClear@4'
  [Linker error] undefined reference to `glMatrixMode@4'
  [Linker error] undefined reference to `glLoadIdentity@0'
  [Linker error] undefined reference to `glTranslatef@12'
  [Linker error] undefined reference to `glRotatef@16'
  [Linker error] undefined reference to `glBegin@4'
  [Linker error] undefined reference to `glColor3f@12'
  [Linker error] undefined reference to `glVertex3f@12'
  [Linker error] undefined reference to `glColor3f@12'
  [Linker error] undefined reference to `glVertex3f@12'
  [Linker error] undefined reference to `glColor3f@12'
  [Linker error] undefined reference to `glVertex3f@12'
  [Linker error] undefined reference to `glEnd@0'
  [Linker error] undefined reference to `glFlush@0'

Автор: Snake174 10.10.2012, 08:10
Подключи библиотеки opengl32 и glu32
#pragma comment (lib,"opengl32.lib")
#pragma comment (lib,"glu32.lib")
#pragma comment (lib,"winmm.lib")

Автор: sergeydr 10.10.2012, 13:56
Тот же эффект

Автор: Snake174 11.10.2012, 10:24
А через сервис -> параметры компилятора подключал?

Автор: Riviero 11.10.2012, 10:39
Посмотри сам из каких библиотек и файлов эти функции и подключи их.

Автор: sergeydr 11.10.2012, 12:22
Цитата(Snake174 @ 11.10.2012,  10:24)
А через сервис -> параметры компилятора подключал?

Я любитель в этом занятии, прошу Вас помочь правильно их подключить

Автор: Snake174 11.10.2012, 12:45
Проект -> Параметры проекта -> Параметры : Кнопка -> Добавить библиотеку. 

Или Сервис-> Параметры компилятора -> Каталоги -> Библиотеки.

Автор: sergeydr 11.10.2012, 16:48
Спасибо разобрался ошибки исчезли

Одна есть
File format not recognized 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)