openGL--GLUT

"GLUT"[I] 全称为 OpenGL Utility Toolkit.[/I] Mark J. Kilgard 创作的 GLUT 库, 是我们创建完全独立于窗口系统的 OpenGL 程序成为可能. 感谢 GLUT, 我们能够在不了解 X Windows 或者 Microsoft Windows 窗口系统本身的情况下编写3D应用程序. Kilgard 编写了GLUT的 X Windows 版本, 后来, Nate Robins 又将之移植到 Microsoft Windows 系统之上. 
在这份教程里, 我将向你介绍一些关于编写 GLUT 应用程序的一些基础.  好的,现在一切准备就绪, 我们可以开始编写 GLUT 应用程序了.  
在这一节中, 我们将会建造应用程序的主函数(main function). 主函数将会将会完成程序的初始化并启动事件处理循环. 所有函数都有一个前缀 glut , 初始化函数的前缀是 glutInit. 我们首先必须调用函数 glutInit.  代码  
void glutInit(int *argc, char **argv);
//参数:  //argc - 一个指向主函数 argc 变量的 未经修改 的指针.
      //argv - 一个指向主函数 argv 变量的 未经修改 的指针.
初始化 GLUT 本身以后, 我们将会定义我们的窗口. 首先, 我们建立窗口的位置, 例如: 在窗口的左上角. 要实现这个功能, 我们需要调用函数 glutWindowsPosition.  
代码 void glutInitWindowPosition(int x, int y); 
//参数: //x- 距离屏幕左边的像素数. 默认值是 -1, 由系统决定窗口的位置. 如果没有没有采用默认值, 那么你应该使用一个合适正值作为实参.  //y- 距离屏幕屏幕顶端的像素数, 其余同上.  请注意, 这些参数只是给窗口管理器的一个建议值. 我们创建的窗口可能会处于不同的位置上, 不过这很少发生. 接下来我们要决定窗口的大小, 为了做到这一点, 我们需要使用函数 glutInitWindowSize.
代码  void glutInitWindowSize(int width, int height);参数:width - 窗口的宽度  height - 窗口的高度  同样的, 高和宽也只是一个建议值, 请避免使用负值.
然后我们需要定义显示模式, 我们使用 glutInitDisplayMode 函数. 
代码 void glutInitDisplayMode(unsigned int mode)参数: mode - 指定显示模式  //mode 参数是一个 GLUT 预定义常数的复合布尔型 (位或). 你可以使用 mode 来指定颜色, 以及缓冲区的数量和类型.  这些常数是:GLUT_RGBA or GLUT_RGB - 默认颜色模式 GLUT_INDEX - 颜色索引模式 
显示模式允许你选择单或双缓冲区窗口. 相关常数是: GLUT_SINGLE - 单缓冲区窗口 GLUT_DOUBLE - 双缓冲区, 平滑动画需要
这里还有更多关于缓冲区的常数: GLUT_ACCUM - 聚集缓冲区 GLUT_STENCIL - The stencil buffer 
GLUT_DEPTH - 深度缓冲区 现在, 假如你想要创建一个RGB窗口, 单缓冲以及一个深度缓冲区. 你需要把相关的常数去 OR 在一起来创建一个正确的常口 
代码 glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE | GLUT DEPTH);  经过以上步骤, 我们可以调用 glutCreateWindow 函数了
代码int glutCreateWindow(char *title); 
参数: title - 窗口标题  glutCreateWindows 函数的返回值是索创建窗口的标示符. 你以后会用到这个标示符. 现在, 我们把上面的代码集合起来, 看看一次完整的窗口初始化:  
代码#include  
void main(int argc, char **argv) { 
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(320,320);
 glutCreateWindow("3D Tech- GLUT Tutorial"); }  请注意包含文件, 我们需要 GLUT 的包含文件.如果你运行了这段代码, 那么你将看到一个黑色的控制台窗口, 但是没有任何OpenGL窗口, 几秒钟以后, 这个窗口也消失了. 在我们开始渲染之前 我们还要做两件事情: 首先是告诉 GLUT 系统负责渲染的函数: 我们来创建一个渲染函数的例子. 这个函数将会清空颜色缓冲区, 并画出两个三角形: 代码 void renderScene(void) {  glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES);  glVertex3f(-0.5,-0.5,0.0);   glVertex3f(0.5,0.0,0.0);  glVertex3f(0.0,0.5,0.0); glEnd(); glFlush(); }   你可以给函数起任意的名字. 然而, 你必须告诉 GLUT 来使用这个函数进行渲染. 这叫做 注册回叫(callback) 函数. GLUT 将会在需要渲染的时候呼叫这个函数. 现在我们来告诉 GLUT 一旦我们的窗口被破坏(注意: 当窗口第一次被创建的时候, 这个函数也会被呼叫), 就调用renderScene函数. GLUT 中有一个函数接受一个函数指针作为参数, 它将这个指针指向的函数作为渲染函数.  代码  void glutDisplayFunc(void (*func)(void)); 参数:func - 渲染函数指针, NULL在这里非法  One last thing missing, that is telling GLUT that we're ready to get in the application event processing loop. GLUT provides a function that gets the application in a never ending loop, always waiting for the next event to process. The GLUT function is glutMainLoop, and the syntax is as follows: 我们最后要做, 就是让程序进入事件处理循环. GLUT 给我们准备了一个函数来使程序进入一个无限循环(死循环), 永远在等待下一个需要处理的事件. 这个函数就是 glutMainLoop: 代码 void glutMainLoop(void)  The code so far is presented bellow. Note that we've added an include statement in order to start using standard OpenGL functions, like glClear, glBegin, glVertex3f, and glEnd.
  
  以下是完整的代码. 我们添加了一个新的包含文件, 以便于我们使用OpenGL的函数, 比如 glClear, glBegin, glVertex3f 和 glEnd.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值