在网上下了一点代码,自己加了一些注释:
#include <stdlib.h>
#define GLUT_DISABLE_ATEXIT_HACK
#include <GL/glut.h>
void display(void)
{
/* 清除所有的像素*/
glClear (GL_COLOR_BUFFER_BIT);
/* 绘制一个对角顶点坐标分别为(0.25, 0.25, 0.0) 和(0.75, 0.75, 0.0) 的白色多边形
*(矩形) */
glColor3f (1.0, 0.0, 0.0);
glBegin(GL_POLYGON);//glBegin支持的方式除了GL_POINTS和GL_LINES,还有GL_LINE_STRIP,GL_LINE_LOOP,GL_TRIANGLES,GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN
//适当了解一些,当然,确认顶点的方式也有很多种:glVertex2d glVertex2f glVertex3f glVertex3fv等等~~~~
glVertex3f (0.25, 0.25, 0.0);
glVertex3f (0.75, 0.25, 0.0);
glVertex3f (0.75, 0.75, 0.0);
glVertex3f (0.25, 0.75, 0.0);
glEnd();
glBegin(GL_LINES);
glVertex2d(0.0,0.0);
glVertex2d(5.0,5.0);
glEnd();
/* 不等待!立刻开始处理在缓冲区中的OpenGL函数调用*/
glFlush ();//保证前面的OpenGL命令立即执行(而不是让它们在缓冲区中等待)。其作用跟fflush(stdout)类似。
}
void init (void)
{
/* 指定清除颜色*/
glClearColor (0.0, 0.0, 0.0, 0.0);
/* 初始化视景体*/
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}
/* 指定窗口的初始大小和位置以及显示模式(单缓存和RGBA模式)
* 打开一个标题为“hello”的窗口,调用初始化函数
* 注册用于显示图形的回调函数,进入主循环并处理事件
*/
int main(int argc, char** argv)
{
glutInit(&argc, argv); /*初始化GLUT并处理命令行参数*/
//设置显示方式,前面是缓冲的选择,有GLUT_SINGLE-使用单缓冲区 GLUT_DOUBLE-双缓冲区
//后面的是颜色表示的方式:GLUT_RGB使用RGB颜色 GLUT_INDEX使用索引颜色
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (600, 600); /*指定窗口的大小,单位为像素*/
glutInitWindowPosition (200, 200); /*指定窗口左上角在屏幕上的位置*/
glutCreateWindow ("Window-name"); /*使用一个OpenGL场景创建一个窗口*/
//注意的是:窗口创建之后,并不能立即显示在屏幕上,需要调用glutMainLoop()才能
init ();
glutDisplayFunc(display);//暂时理解成:设置一个函数,当需要进行画图时,这个函数就会被调用
glutMainLoop();//进行消息循环(暂时这么理解吧)
return 0; /* ANSI C 要求main()返回一个int值*/
}