【OpenGL从入门到精通(一)】Windows搭建OpenGL的渲染环境,并初始化一个OPenGL窗口
注意:需要在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窗口相关推荐
- OpenGL从入门到精通--纹理
纹理 github源码仓库 opengl环境准备 opengl编程从入门到精通-hello,window OpenGL从入门到精通–你好三角形 OpenGL从入门到精通–着色器的使用 我们可以为每个顶 ...
- OpenGL从入门到精通--着色器的使用
着色器 github源码仓库 opengl环境准备 opengl编程从入门到精通-hello,window OpenGL从入门到精通–你好三角形 OpenGL从入门到精通–着色器的使用 着色器(Sha ...
- OpenGL从入门到精通--你好三角形
三角形 github源码仓库 opengl环境准备 opengl编程从入门到精通-hello,window OpenGL从入门到精通–你好三角形 OpenGL从入门到精通–着色器的使用 绘图中需要牢记 ...
- opengl从入门到精通
Hello opengl github源码仓库 opengl环境准备 opengl编程从入门到精通-hello,window OpenGL从入门到精通–你好三角形 OpenGL从入门到精通–着色器的使 ...
- 《SolidWorks 2017中文版机械设计从入门到精通)》——1.4 操作环境设置
本节书摘来自异步社区<SolidWorks 2017中文版机械设计从入门到精通>一书中的第1章,第1.4节,作者: 赵罘 , 杨晓晋 , 赵楠 更多章节内容可以访问云栖社区"异步 ...
- 《SolidWorks 2013中文版机械设计从入门到精通》一1.4 操作环境设置
本节书摘来自异步社区<SolidWorks 2013中文版机械设计从入门到精通>一书中的第1章,第1.4节,作者 赵罘 , 杨晓晋 , 刘玥,更多章节内容可以访问云栖社区"异步社 ...
- 《AutoCAD 2016中文版室内装潢设计从入门到精通》——2.3 设置绘图环境
本节书摘来自异步社区<AutoCAD 2016中文版室内装潢设计从入门到精通>一书中的第2章,第2.3节,作者: 贾燕 更多章节内容可以访问云栖社区"异步社区"公众号查 ...
- 【OpenGL从入门到精通(二)】绘制一个点
1.想要绘制一个点,首先要在OpenGL初始化中先设置矩阵 2.然后在绘制场景中进行点的绘制.其中包括 当前颜色设置:点的位置,点的大小等等 #include <windows.h> #i ...
- 【OpenGL从入门到精通(七)】OpenGL中的数学
1.向量单位化 2.三维向量点乘/点积(结果为标量) 3.三维向量叉乘(叉积)结果为向量 3.坐标平移 因为在OpenGL中使用的都是齐次坐标,即x , y , z , w 如果使得点(0, 0, 0 ...
最新文章
- python使用复合语句def创建函数对象_【收藏】Python实用技巧-成为Pythoner必经之路...
- 网站内容收录除了原创性和质量其他因素也少不了
- 如何让本机时间与局域网的一台电脑的日期同步?
- WPF布局控件Grid的基本使用 - 使用kaxaml
- axios请求拦截器错误_Axios使用拦截器全局处理请求重试
- 鲸鱼优化算法_盘点 35 个 Java 代码优化细节
- UI2CODE再进化!结合Redux的框架升级!
- python语言基本语句例句-关于python:使用WordNet查找同义词,定义和例句
- 客户区和非客户区指的什么?窗口客户区和视图客户区的区别(小问题大思想)
- error C2864 只有静态常量整型数据成员才可以在类中初始化
- BMFont 字体生成工具使用
- vue点餐系统项目总结
- vue实现table课程表
- 没有产权证的车库能不能随时拆掉
- Linux从入门到跑路
- 基本系统调用性能lmbench测试方法和下载
- oracle8616,ORACLE11G-数据库备份恢复之RMAN全库备份恢复
- lvgl 8 中文内置字库配置
- ESP32S3系列--SPI主机驱动详解(一)
- html是div环绕文字,文字环绕一个div在HTML