摘自:http://blog.sina.com.cn/s/blog_4c7fa77b010007fr.html
#include <windows.h> // 根据系统需要
#include <gl/gl.h>
#include <gl/glut.h>
void myInit(void)
{
glClearColor(1.0,1.0,1.0,0.0); // 设置白色背景
glColor3f(0.0f,0.0f,0.0f); // 设置绘图颜色
glPointSize(8.0); // 一个点是4×4像素
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,640.0,0.0,480.0);
}
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT); // 清空显示
glBegin(GL_POINTS);
glVertex2i(100,50); // 绘制3个点
glVertex2i(100,130);
glVertex2i(150,130);
glEnd();
glFlush(); // 将所有的输出显示出来
}
void main(int argc, char** argv)
{
glutInit(&argc,argv); // 初始化工具套件
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // 设置显示模式
glutInitWindowSize(640,480); // 设置窗口尺寸
glutInitWindowPosition(100,150); // 设置窗口在屏幕上的位置
glutCreateWindow("my first attempt"); // 打开屏幕窗口
glutDisplayFunc(myDisplay); // 注册重新绘制函数
myInit();
glutMainLoop(); // 进入不断的循环
}
先看一下主函数,在主函数中要进行几个操作:
初始化的工作,包括工具套件的初始化还有自定义的初始化(myInit);窗口设置(窗口大小,位置,显示模式等);注册回调函数等。如果使用事件驱动的话,必须添加glutMainLoop();使程序进入到等待事件发生的状态
使用glut可以很方便地进行事件驱动函数的注册,如注册鼠标动作只需:
glutMouseFunc(myMouse);
这样就注册了鼠标动作响应函数myMouse,可以直接在myMous函数里添加鼠标动作所执行的操作,前面程序中glutDisplayFunc(myDisplay); 注册了重绘函数myDisplay,当窗口重绘时就会执行myDisplay函数的内容,即绘制三个点。
再看看这一段
glBegin(GL_POINTS);
glVertex2i(100,50); // 绘制3个点
glVertex2i(100,130);
glVertex2i(150,130);
glEnd();
这一段是绘制三个点的函数。在OpenGL中,绘制点、线、拆线、多边形等对象时必须传送一序列的点,这些点必须处于glBegin()和glEnd()之间,glBegin()里的参数确定要画哪个对象,这里用的GL_POINTS是用于绘制点的,这个常量内置于OpenGL中,类似的常量还有GL_LINES,GL_POLYGON等。
再看看glVertex2i这个函数,在OpenGL中很多函数都跟这个函数一样具有几个可变的部分,gl前缀,Vertex基础命令,2参数数目,i参数类型,i表示参数为整型,如果不考虑参数类型时可用*。
注:gl里使用的整型数为32位,如果在系统里使用的是16位可能会造成错误。在定义参数时可以使用gl的类型,如GLint,GLfloat等。