注意:需要在Windows 窗口程序下,而不能是控制台程序,Windows平台的VS下已经包含了OpenGL相关的API,可以直接引用

#include <windows.h>
#include<gl/GL.h>
#include<gl/GLU.h>#pragma comment(lib,"opengl32.lib")
#pragma comment(lib,"glu32.lib")LRESULT CALLBACK GLWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{switch (msg){case WM_CLOSE:PostQuitMessage(0);break;}return DefWindowProc(hwnd, msg, wParam, lParam);
}INT WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd)
{//register windowWNDCLASSEX wndclass;wndclass.cbClsExtra = 0;wndclass.cbSize = sizeof(WNDCLASSEX);wndclass.cbWndExtra = 0;wndclass.hbrBackground = NULL;wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);wndclass.hIcon = NULL;wndclass.hIconSm = NULL;wndclass.hInstance = hInstance;wndclass.lpfnWndProc = GLWindowProc;wndclass.lpszClassName = L"GLWindow";wndclass.lpszMenuName = NULL;wndclass.style = CS_VREDRAW | CS_HREDRAW;ATOM atom = RegisterClassEx(&wndclass);if (!atom){return 0;}//create windowHWND hwnd = CreateWindowEx(NULL, L"GLWindow", L"OpenGL Window", WS_OVERLAPPEDWINDOW,100, 100, 800, 600, NULL, NULL, hInstance, NULL);//create opengl render context HDC是Windows的设备描述表句柄。//在Windows环境中,句柄是用来标识被应用程序所建立或使用的对象的唯一整数HDC dc = GetDC(hwnd);//颜色描述符,渲染的像素格式PIXELFORMATDESCRIPTOR pfd;memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));pfd.nVersion = 1;pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);pfd.cColorBits = 32;//颜色缓冲区pfd.cDepthBits = 24;//深度缓冲区pfd.cStencilBits = 8;//pfd.iPixelType = PFD_TYPE_RGBA;//像素格式pfd.iLayerType = PFD_MAIN_PLANE;//分层式pfd.dwFlags = PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER;//渲染到窗口上,支持OPENGL像素格式,双缓冲//选择像素格式int pixelFormat = ChoosePixelFormat(dc,&pfd);SetPixelFormat(dc, pixelFormat, &pfd);//创建OPenGL的渲染设备,HGLRC rc = wglCreateContext(dc);//把rc和dc设置成当前的渲染设备wglMakeCurrent(dc, rc);//初始化OpenGL的//glClearColor:red、green、blue、alpha分别是红、绿、蓝、不透明度,值域均为[0,1]。即设置颜 色,为后面的glClear做准备,默认值为(0,0,0,0)。切记:此函数仅仅设定颜色,并不执行清除工作。glClearColor(0.1, 0.4, 0.6, 1.0);//设置清除缓冲区背景颜色//show windowShowWindow(hwnd, SW_SHOW);UpdateWindow(hwnd);MSG msg;while (true){if (PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE)){if (msg.message == WM_QUIT){break;}TranslateMessage(&msg);DispatchMessage(&msg);}//draw scene绘制场景/*glClear:参数可为下列四个之一或多个,若多个之间用“ | ”隔开,如 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)。即用glClearClolr设定的颜色值清 除缓存区。参数:GL_COLOR_BUFFER_BIT当前可写的颜色缓冲GL_DEPTH_BUFFER_BIT深度缓冲GL_ACCUM_BUFFER_BIT累积缓冲GL_STENCIL_BUFFER_BIT模板缓冲*/glClear(GL_COLOR_BUFFER_BIT);//present scene 前面缓冲区//后缓冲区交换到前缓冲区SwapBuffers(dc);}return 0;
}

【OpenGL从入门到精通(一)】Windows搭建OpenGL的渲染环境,并初始化一个OPenGL窗口相关推荐

  1. OpenGL从入门到精通--纹理

    纹理 github源码仓库 opengl环境准备 opengl编程从入门到精通-hello,window OpenGL从入门到精通–你好三角形 OpenGL从入门到精通–着色器的使用 我们可以为每个顶 ...

  2. OpenGL从入门到精通--着色器的使用

    着色器 github源码仓库 opengl环境准备 opengl编程从入门到精通-hello,window OpenGL从入门到精通–你好三角形 OpenGL从入门到精通–着色器的使用 着色器(Sha ...

  3. OpenGL从入门到精通--你好三角形

    三角形 github源码仓库 opengl环境准备 opengl编程从入门到精通-hello,window OpenGL从入门到精通–你好三角形 OpenGL从入门到精通–着色器的使用 绘图中需要牢记 ...

  4. opengl从入门到精通

    Hello opengl github源码仓库 opengl环境准备 opengl编程从入门到精通-hello,window OpenGL从入门到精通–你好三角形 OpenGL从入门到精通–着色器的使 ...

  5. 《SolidWorks 2017中文版机械设计从入门到精通)》——1.4 操作环境设置

    本节书摘来自异步社区<SolidWorks 2017中文版机械设计从入门到精通>一书中的第1章,第1.4节,作者: 赵罘 , 杨晓晋 , 赵楠 更多章节内容可以访问云栖社区"异步 ...

  6. 《SolidWorks 2013中文版机械设计从入门到精通》一1.4 操作环境设置

    本节书摘来自异步社区<SolidWorks 2013中文版机械设计从入门到精通>一书中的第1章,第1.4节,作者 赵罘 , 杨晓晋 , 刘玥,更多章节内容可以访问云栖社区"异步社 ...

  7. 《AutoCAD 2016中文版室内装潢设计从入门到精通》——2.3 设置绘图环境

    本节书摘来自异步社区<AutoCAD 2016中文版室内装潢设计从入门到精通>一书中的第2章,第2.3节,作者: 贾燕 更多章节内容可以访问云栖社区"异步社区"公众号查 ...

  8. 【OpenGL从入门到精通(二)】绘制一个点

    1.想要绘制一个点,首先要在OpenGL初始化中先设置矩阵 2.然后在绘制场景中进行点的绘制.其中包括 当前颜色设置:点的位置,点的大小等等 #include <windows.h> #i ...

  9. 【OpenGL从入门到精通(七)】OpenGL中的数学

    1.向量单位化 2.三维向量点乘/点积(结果为标量) 3.三维向量叉乘(叉积)结果为向量 3.坐标平移 因为在OpenGL中使用的都是齐次坐标,即x , y , z , w 如果使得点(0, 0, 0 ...

最新文章

  1. python使用复合语句def创建函数对象_【收藏】Python实用技巧-成为Pythoner必经之路...
  2. 网站内容收录除了原创性和质量其他因素也少不了
  3. 如何让本机时间与局域网的一台电脑的日期同步?
  4. WPF布局控件Grid的基本使用 - 使用kaxaml
  5. axios请求拦截器错误_Axios使用拦截器全局处理请求重试
  6. 鲸鱼优化算法_盘点 35 个 Java 代码优化细节
  7. UI2CODE再进化!结合Redux的框架升级!
  8. python语言基本语句例句-关于python:使用WordNet查找同义词,定义和例句
  9. 客户区和非客户区指的什么?窗口客户区和视图客户区的区别(小问题大思想)
  10. error C2864 只有静态常量整型数据成员才可以在类中初始化
  11. BMFont 字体生成工具使用
  12. vue点餐系统项目总结
  13. vue实现table课程表
  14. 没有产权证的车库能不能随时拆掉
  15. Linux从入门到跑路
  16. 基本系统调用性能lmbench测试方法和下载
  17. oracle8616,ORACLE11G-数据库备份恢复之RMAN全库备份恢复
  18. lvgl 8 中文内置字库配置
  19. ESP32S3系列--SPI主机驱动详解(一)
  20. html是div环绕文字,文字环绕一个div在HTML

热门文章

  1. 如何在Flutter(REST API)中进行API调用
  2. Java:汇总堆外数据
  3. 在JDK 9(以及8)以及更高版本中,所有内容都可以作为一个流
  4. 功能Java示例 第5部分–将I / O移到外部
  5. maven ant_如何在Maven中运行Ant目标?
  6. Java命令行界面(第28部分):getopt4j
  7. 因此,甲骨文杀死了java.net
  8. 将Java应用程序作为Windows服务安装
  9. jenkins api_接触Jenkins(Hudson)API,第2部分
  10. jaxb xsd生成xml_使用JAXB从XSD生成XML