Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > OpenGL into Win32API


Автор: mimo 13.10.2005, 13:50
мне нужно создать 3d объекты с помощью OpenGL, а затем использовать их в дальнейшем создании проекта на win32api. Может у кого есть работающие примеры на эту тему. Подкиньте или еще лучше литературу посоветуйте где найти в инете smile

Автор: Emantuohtiw 14.10.2005, 06:33
Код

//=============================================================================

#include "../inc/aOpenGL.h"
#include "../inc/aLog.h"

//=============================================================================

extern HWND h_Wnd;
extern HGLRC hRC;
extern HDC hDC;
extern aOpenGL wogl;
extern aLog logo;

//=============================================================================

LRESULT CALLBACK WndProc(HWND hWnd, unsigned int message, WPARAM wParam, LPARAM lParam)
{
    unsigned int pixelFormat;
    PIXELFORMATDESCRIPTOR pfd = 
    {
        sizeof(PIXELFORMATDESCRIPTOR),
        1,
        PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | 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
    };

    switch(message)
    {
        case WM_CREATE:
            h_Wnd = hWnd;
            hDC = GetDC(hWnd);
            pixelFormat = ChoosePixelFormat(hDC, &pfd);
            if (!pixelFormat)
            {
                logo.log("Can't Choose Pixel Format");
                PostQuitMessage(0);
                break;
            }
            if (!SetPixelFormat(hDC, pixelFormat, &pfd))
            {
                logo.log("Can't Set Pixel Format");
                PostQuitMessage(0);
                break;
            }
            hRC = wglCreateContext(hDC);
            if (!hRC)
            {
                logo.log("Can't Create OpenGL Rendering Context");
                PostQuitMessage(0);
                break;
            }
            if (!wglMakeCurrent(hDC, hRC))
            {
                logo.log("Can't Call Thread Of Current Rendering Context");
                PostQuitMessage(0);
                break;
            }
            wogl.initGL();
            break;
        case WM_DESTROY:
        case WM_CLOSE:
            ChangeDisplaySettings(0, 0);
            wglMakeCurrent(hDC, 0);
            wglDeleteContext(hRC);
            ReleaseDC(hWnd, hDC);
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
            break;
    }
    return 0;
}

//=============================================================================

int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, char* lpCmdLine, int cmdShow)
{
    MSG msg;
    WNDCLASS wc;
    HWND hWnd;

    wc.style = CS_HREDRAW|CS_VREDRAW|CS_OWNDC;
    wc.lpfnWndProc = (WNDPROC) WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = 0;
    wc.hCursor = LoadCursor(0, IDC_ARROW);
    wc.hbrBackground = 0;
    wc.lpszMenuName = 0;
    wc.lpszClassName = "wglClass";

    if (!RegisterClass(&wc))
    {
        logo.log("Can't Register Window Class");
        return 0;
    }

    hWnd = CreateWindow("wglClass", "Bsedian se le Nek", WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, 0, 0, 800, 600, 0, 0, hInstance, 0);
    
    if (!hWnd)
    {
        logo.log("Can't Create Window");
        return 0;
    }

    ShowWindow(hWnd, SW_SHOWNORMAL);
    UpdateWindow(hWnd);
    SetFocus(hWnd);

    while (1)
    {
        while(PeekMessage(&msg, 0, 0, 0, PM_NOREMOVE))
        {
            if (GetMessage(&msg, 0, 0, 0))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
            else
                return 1;
        }

        wogl.drawGLScene();
        SwapBuffers(hDC);
    }
}

В классе aOpenGL, соответственно идёт работа с OGL'ом.

Автор: Tror 21.10.2005, 13:00
Зайди на сайт pmg.org.ru.
там есть переводы уроков NeHe и ещё
много всякой инфы по OpenGL. smile

Автор: Гость_Сергей 12.12.2005, 05:20
Не работают игрушки, выдается сообщение не библиотеки AOpengl

Автор: Fixin 12.12.2005, 19:26
Цитата
Не работают игрушки, выдается сообщение не библиотеки AOpengl
Это вопрос по теме, или ты вольный дух сети, занесенный роком поисковика?
Если первый вариант, то AOpengl, в данном случае, класс, в котором
Цитата(Emantuohtiw @ 14.10.2005, 07:33)
идёт работа с OGL'ом.


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