OpenGL库函数帮助文档,没有中文的

时间:2017-07-18 15:03:39
【文件属性】:

文件名称:OpenGL库函数帮助文档,没有中文的

文件大小:538KB

文件格式:CHM

更新时间:2017-07-18 15:03:39

OpenGL 库函数 中文

OpenGL库函数帮助文档,附带的实例不错 #include <gl/glu.h> #include <GL/gl.h> #include <GL/glaux.h> //第一行设置的变量是Rendering Context(着色描述表)。每一个OpenGL都被连接到一个着色描述表上。 //着色描述表将所有的OpenGL调用命令连接到Device Context(设备描述表)上。 //DC将窗口连接到GDI(Graphics Device Interface图形设备接口)。而RC将OpenGL连接到DC。 //创建OpenGL窗口的通常步骤 // 1.创建一个扩展的Windows窗口(注册类,创建窗口,取得句柄hwnd,取得设备场景hdc // 2.提供一个像素格式(结构),让Windows寻找匹配的格式,并给场景设置对应的像素格式 // 3.取得场景的着色描述表hrc,并激活着色描述表 // 4.显示窗口,调用调整窗口尺寸过程,调用GL初始化过程 // 5.进入窗口的消息循环,调用绘制过程,调用交换缓存过程显示图形 LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; HGLRC hRC=NULL; // 永久着色描述表 HDC hDC=NULL; // 私有GDI设备描述表 HWND hWnd=NULL; // 保存我们的窗口句柄 HINSTANCE hInstance; // 保存程序的实例 bool keys[256]; // 用于键盘例程的数组 bool active=TRUE; // 窗口的活动标志,缺省为TRUE bool fullscreen=TRUE; // 全屏标志缺省设定成全屏模式 GLvoid ReSizeGLScene(GLsizei width, GLsizei height) // 重置并初始化GL窗口大小 { if (height==0) // 防止被零除 { height=1; // 将Height设为1 } glViewport(0, 0, width, height); // 重置当前的视口(Viewport) glMatrixMode(GL_PROJECTION); // 选择投影矩阵 glLoadIdentity(); // 重置投影矩阵 // 计算窗口的外观比例 gluPerspective(50.0f,(GLfloat)width /(GLfloat) height,0.1f,100.0f); glMatrixMode(GL_MODELVIEW); // 选择模型观察矩阵 glLoadIdentity(); // 重置模型观察矩阵 } int InitGL(GLvoid) // 此处开始对OpenGL进行所有设置 { glShadeModel(GL_SMOOTH); // 启用阴影平滑 glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // 黑色背景 glClearDepth(1.0f); // 设置深度缓存 glEnable(GL_DEPTH_TEST); // 启用深度测试 glDepthFunc(GL_LEQUAL); // 所作深度测试的类型 glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // 真正精细的透视修正 return TRUE; } // 在DrawGLScene中进行所有的绘制 int DrawGLScene(GLvoid) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕和深度缓存 glLoadIdentity(); // 重置当前的模型观察矩阵 // 调用glLoadIdentity()之后,您实际上讲当前点移到了屏幕中心, // X坐标轴从左至右,Y坐标轴从下至上,Z坐标轴从里至外。 // OpenGL屏幕中心的坐标值是X和Y轴上的0.0f点。 // 中心左面的坐标值是负值,右面是正值。移向屏幕顶端是正值,移向屏幕底端是负值。 // 移入屏幕深处是负值,移出屏幕则是正值,下面的代码绘制一个三角形和正方形 glTranslatef(-1.5f,0.0f,-6.0f); // 左移 1.5 单位,并移入屏幕 6.0 glBegin(GL_TRIANGLES); // 绘制三角形 glVertex3f( 0.0f, 1.0f, 0.0f); // 上顶点 glVertex3f(-1.0f,-1.0f, 0.0f); // 左下 glVertex3f( 1.0f,-1.0f, 0.0f); // 右下 glEnd(); // 三角形绘制结束 glTranslatef(3.0f,0.0f,0.0f); // 右移3单位 glBegin(GL_QUADS); // 绘制正方形 glVertex3f(-1.0f, 1.0f, 0.0f); // 左上 glVertex3f( 1.0f, 1.0f, 0.0f); // 右上 glVertex3f( 1.0f,-1.0f, 0.0f); // 左下 glVertex3f(-1.0f,-1.0f, 0.0f); // 右下 glEnd(); // 正方形绘制结束 return TRUE; // 一切 OK } int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow) { MSG msg; GLuint PixelFormat; // 保存查找匹配的象素格式 WNDCLASS wc; // 窗口类结构 DWORD dwExStyle; // 扩展窗口风格 DWORD dwStyle; // 窗口风格 hInstance = GetModuleHandle(NULL); // 取得我们窗口的实例 wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; // 移动时重画,并为窗口取得DC wc.lpfnWndProc = (WNDPROC) WndProc; // WndProc处理消息 wc.cbClsExtra = 0; // 无额外窗口数据 wc.cbWndExtra = 0; // 无额外窗口数据 wc.hInstance = hInstance; // 设置实例 wc.hIcon = LoadIcon(NULL, IDI_WINLOGO); // 装入缺省图标 wc.hCursor = LoadCursor(NULL, IDC_ARROW); // 装入鼠标指针 wc.hbrBackground = NULL; // GL不需要背景 wc.lpszMenuName = NULL; // 不需要菜单 wc.lpszClassName = "OpenGL"; // 设定类名字 if (!RegisterClass(&wc)) // 尝试注册窗口类 { MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION); return FALSE; //退出并返回FALSE } //注意我们在窗体风格中包括了 WS_CLIPSIBLINGS 和 WS_CLIPCHILDREN。 //要让OpenGL正常运行,这两个属性是必须的。他们阻止别的窗体在我们的窗体上绘图。 hWnd=CreateWindowEx( WS_EX_APPWINDOW | WS_EX_WINDOWEDGE, // 扩展窗体风格 "OpenGL", // 类名字 "OpenGL", // 窗口标题 WS_CLIPSIBLINGS | // 必须的窗体风格属性 WS_CLIPCHILDREN | // 必须的窗体风格属性 WS_OVERLAPPEDWINDOW, // 选择的窗体属性 0, 0, // 窗口位置 600, // 计算调整好的窗口宽度 400, // 计算调整好的窗口高度 NULL, // 无父窗口 NULL, // 无菜单 hInstance, // 实例 NULL); //下面的代码描述象素格式。我们选择了通过RGBA(红、绿、蓝、alpha通道) //支持OpenGL和双缓存的格式。我们试图找到匹配我们选定的色彩深度(16位、24位、32位)的象素格式。 //最后设置16位Z-缓存。其余的参数要么未使用要么不重要 //(stencil buffer模板缓存和accumulation buffer聚集缓存除外)。 //PIXELFORMATDESCRIPTOR结构与ChoosePixelFormat()与SetPixelFormat()的定义见WinGDI.h文件 //wglCreateContext()与wglMakeCurrent()的定义均见WinGDI.h文件 static PIXELFORMATDESCRIPTOR pfd= //pfd 告诉窗口我们所希望的东东 { sizeof(PIXELFORMATDESCRIPTOR), //上诉格式描述符的大小 1, // 版本号 PFD_DRAW_TO_WINDOW | // 格式必须支持窗口 PFD_SUPPORT_OPENGL | // 格式必须支持OpenGL PFD_DOUBLEBUFFER, // 必须支持双缓冲 PFD_TYPE_RGBA, // 申请 RGBA 格式 16, // 选定色彩深度 0, 0, 0, 0, 0, 0, // 忽略的色彩位 0, // 无Alpha缓存 0, // 忽略Shift Bit 0, // 无聚集缓存 0, 0, 0, 0, // 忽略聚集位 16, // 16位 Z-缓存 (深度缓存) 0, // 无模板缓存 0, // 无辅助缓存 PFD_MAIN_PLANE, // 主绘图层 0, // 保留 0, 0, 0 // 忽略层遮罩 }; hDC=GetDC(hWnd); //取得GL窗口的设备描述表达 PixelFormat=ChoosePixelFormat(hDC,&pfd); //让WINDOWS寻找与我们提供的pfd相匹配的像素格式,找到后保存在变量PixelFormat中 SetPixelFormat(hDC,PixelFormat,&pfd); //给设备场景hDC设置象素格式 hRC=wglCreateContext(hDC); //取得着色描述表 wglMakeCurrent(hDC,hRC); //激活着色描述表,GL窗口创建工作完成 ShowWindow(hWnd,SW_SHOW); // 显示窗口 SetForegroundWindow(hWnd); // 略略提高优先级 SetFocus(hWnd); // 设置键盘的焦点至此窗口 ReSizeGLScene(600, 400); //调整GL窗口尺寸 InitGL(); //GL初始设置 //GetMessage从调用线程的消息队列里取得一个消息并将其放于指定的结构, //GetMessage不是实时的,需要实时的用While(!done)或结合Timer //我们绘制场景并交换缓存(使用双缓存可以实现无闪烁的动画)。 //我们实际上在另一个看不见的"屏幕"上绘图。当我们交换缓存后, //我们当前的屏幕被隐藏,现在看到的是刚才看不到的屏幕。 //这也是我们看不到场景绘制过程的原因。场景只是即时显示。 while (GetMessage (&msg, NULL, 0, 0)) //进入消息循环并从消息队列中取得消息。 { DrawGLScene(); // 绘制场景 SwapBuffers(hDC); // 交换缓存 TranslateMessage (&msg) ; //TranslateMessage 转译某些键盘消息。 DispatchMessage (&msg) ; //DispatchMessage 将消息发送给窗口消息处理程序。 } return msg.wParam ; } LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: CreateWindow (TEXT ("button"), TEXT ("按钮"), WS_CHILD | WS_VISIBLE , 0, 0, 50, 50, hwnd, NULL, hInstance, NULL) ; return false; case WM_DESTROY: PostQuitMessage (0) ; //PostQuitMessage 在消息队列中插入一个「退出程序」消息。 return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; //DefWindowProc 执行内定的消息处理。 }


网友评论

  • 非常好,谢谢分享,真的很有用
  • 无法显示,还我血汗分
  • 非常好,值得学习,都是英文的,谢谢分享
  • 挺不错,在这下方便,很好的资源
  • 不知道什么原因,不能显示函数内容!
  • 帮助文档,方便查找函数,还在学习~~
  • 不知道什么原因,不能显示函数内容!
  • 非常全的函数库,值得推荐哦
  • 函数列表倒是有,但是没有函数说明呀
  • 慢慢看吧!暂时看不太懂!
  • 函数比较齐全,
  • 这个资源很好哈
  • 不知道怎么回事,下载后打开无内容
  • OpenGL库函数帮助文档,附带的实例不错