OpenGL边用边学------1 VS2015最简单OpenGL设置代码

Windows平台下开发OpenGL程序,最常用的还是使用VS环境,glut并不常用。作为《OpenGL边用边学》开篇第一文,先解决在VS环境下设置OpenGL的问题。

1. 使用VS设置向导,建立Win32应用程序框架

这个步骤不再多说了,鼠标点几下就可以完成。完成之后编译运行,确保自动生成的项目可用。

2. 包含必要的头文件,链接必要的库文件

在stdafx.h中增加如下代码。

#include <gl/GL.h>
#include <gl/GLU.h>

#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glu32.lib")

3. 初始化OpenGL渲染环境,执行最简单渲染

修改窗口过程WndProc(),增加WM_CREATEWM_PAINT消息的处理,一个用来初始化OpenGL环境,另一个用来实际OpenGL绘图操作。

//
//  函数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的:    处理主窗口的消息。
//
//  WM_COMMAND  - 处理应用程序菜单
//  WM_PAINT    - 绘制主窗口
//  WM_DESTROY  - 发送退出消息并返回
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_CREATE:
        OnCreate(hWnd, message, wParam, lParam);
        break;
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // 分析菜单选择: 
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                break;
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
        }
        break;
    case WM_PAINT:
        OnPaint(hWnd, message, wParam, lParam);
        ::ValidateRect(hWnd, NULL);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

WM_CREATE消息处理函数如下,功能就是初始化窗口的OpenGL渲染环境。

void OnCreate(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static 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
    };
    HDC hdc = ::GetDC(hWnd);
    int pixelFormat = ::ChoosePixelFormat(hdc, &pfd);
    if (!::SetPixelFormat(hdc, pixelFormat, &pfd)) {
        ::ReleaseDC(hWnd, hdc);
        MessageBox(hWnd, L"SetPixelFormat", L"ERROR", MB_OK);
        return;
    }
    HGLRC hrc = ::wglCreateContext(hdc);
    if (!::wglMakeCurrent(hdc, hrc)) {
        ::ReleaseDC(hWnd, hdc);
        ::wglDeleteContext(hrc);
        MessageBox(hWnd, L"wglMakeCurrent", L"ERROR", MB_OK);
        return;
    }
    ::ReleaseDC(hWnd, hdc);
}

WM_PAINT消息处理函数如下,功能是清空颜色缓冲区,并交换前后缓存,从而更新显示。

void OnPaint(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    glClear(GL_COLOR_BUFFER_BIT);
    HDC hdc = ::GetDC(hWnd);
    ::SwapBuffers(hdc);
    ::ReleaseDC(hWnd, hdc);
}

至此最简单的Win32+OpenGL程序框架就完成了。运行后窗口客户区显示为黑色,如下图:

OpenGL最简单框架

源码下载

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值