程序入门都有个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) |