Chinaunix首页 | 论坛 | 博客
  • 博客访问: 262044
  • 博文数量: 41
  • 博客积分: 2013
  • 博客等级: 大尉
  • 技术积分: 523
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-08 23:13
文章分类

全部博文(41)

文章存档

2010年(41)

我的朋友

分类:

2010-05-20 10:55:57

程序入门都有个Hello World,OpenGL也不例外。

话说,某程序员退休后,对书法非常感兴趣,于是买来了上好的文房四宝,准备好好地练习练习。他铺开宣纸,提起毛笔,郑重地写下一行字:Hello World!

当我们将开发程序必备的工具准备妥当时,你的第一行字该怎么写呢?假设你已经装好了OpenGL和glut(我在linux下是mesa和freeglut),那么一个最简的程序应该如下:

#include<GL/glut.h>

void display(){
    glClear(GL_COLOR_BUFFER_BIT);
    glFlush();
}

int main(int argc, char* argv[]){
    glutInit(&argc, argv);
    //glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);

    glutCreateWindow("Hello");

    //glutInitWindowPosition(0,0);
    //glutInitWindowSize(500,500);
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}


display函数是必不可少的,因为OpenGL需要知道怎么画。glClear也是必不可少的,因为OpenGL每画一帧都要重绘一次,这个背景是什么东西要明确。当然,如果你不要背景,或者说画的内容覆盖了整个窗口,那也可以不要glClear,但总之,display函数中要有绘图的函数。glFlush也不可少,强制刷新,我的系统下没这个函数是不行的,也许不需要(系统也许会隐式地调用了这个函数),但最好是放上去。

主函数中的四个函数应该说都是必须的。glutInit注意第二个参数不用取址。

我的编译方式是

g++ -lglut -lGL -lGLU hello.cpp -o Hello


即用到libglut, libGL, libGLU。我每个OpenGL程序都是这么编译的,当然,在这个程序中,-lGLU不是必须的,甚至-lGL也不是必须的,因为libGL包含在libglut中了(也许这只是freeglut的实现问题)。不管怎样,都用上不会出错,特别是,我将其写到编译脚本中去了,以后遇到复杂的程序就不需要改动了。
阅读(1600) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~