【OpenGL】【计算机图形学原理】撸课本系列一
? P13 简单二维图元的生成方法 ? #include <GL/glut.h> //用于表示openGL允许采用
? ? glClear(GL_COLOR_BUFFER_BIT); //清除颜色缓存
glClear()用于表示清除缓存,可以用 “|” 组合不同的缓冲标识符。缓冲标识符有四种。
glClear(GL_COLOR_BUFFER_BIT)表示把整个窗口清除为黑色。 glClearColor(0.0,0.0,0.0)表示清楚颜色设为黑色。 其余的缓冲标识符也有相对应的函数。 ? ? glPointSize(3.0); //指定栅格化点的直径
glPointSize()一定要用于画点开始前,即glBegin()前。? 对应的glBegin()中的参数必须为GL_POINTS或GL_POINT。 一些常见错误:
? ? glBegin(GL_POINTS); //画点开始
glBegin()与glEnd()配合使用。 函数原型为void glBegin(GLenum mode)。 mode中的参数可以是点或线等。
? ? glVertex2f(0.0,0.0); //指定点
用于指定一个点,由glVertex函数为前缀,后跟一个数字,用于表明指定点的维数(同为参数的个数),最后跟一个字母,用于表示参数的类型。
参数的数值范围为-1~1 (在标准视图中),如果超出这个范围就会消失在视图中。 (tips:如果在视图中找不到点,检查参数范围) ? ? glEnd(); //画点结束
在glBegin()和glEnd()中间可以使用的函数
? ? glFlush(); //清空缓冲区,将指令送往硬件立即执行(强制刷新)
通常情况下,OpenGL指令不是立即执行的,它们首先被送到指令缓冲区,然后才被送到硬件执行。glFinish()和glFlush()都是强制将命令缓冲区的内容提交给硬件执行。 glFlush()将命令传达完毕后立即返回,不会等待指令执行完毕。这些指令会在有限时间内执行完毕。 ? ? glutInit(&argc,argv); //GLUT初始化
argc:一个指针,指向从main()函数传递过来的没更改的argc变量。 argv:一个指针,指向从main()函数传递过来的没更改的argv变量。 ? ? glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //定义显示方式
函数原型:void glutInitDisplayMode(unsigned int mode)。 mode可以指定显示模式
可以用“|”来建立自己想要的多个显示模式。 ? ? glutInitWindowPosition(0,0); //确定窗口位置(默认是屏幕左上角)
函数原型:void glutInitWindowPosition(int x,int y) x表示距离屏幕左边的像素数。-1是默认值,即由窗口管理程序决定窗口出现在哪里,可以自己设置值来确定位置。 y表示屏幕上边的像素值,类似x值。 ? ? glutInitWindowSize(240,240); //设置窗口大小
函数原型:void glutInitWindowSize(int width,int height) width表示窗口的宽度 height表示窗口的高度 避免使用负数 ? ? glutCreateWindow(argv[0]); //创建窗口
函数原型:int glutCreateWindow(char* title) title为窗口的标题 ? ? glutDisplayFunc(display); //绘图函数
函数原型:void glutDisplayFunc(void (*func)(void)); func当窗口需要被重绘时调用的函数的名称,用NULL作为实参是错误的。 程序运行时自动调用。 ? ? glutMainLoop(); //循环
? ? ? 完整代码: #include <GL/glut.h>
void display(void) { glClear(GL_COLOR_BUFFER_BIT); glPointSize(3.0); glBegin(GL_POINTS); glVertex2f(0.0,0.0); glEnd(); glPointSize(6.0); glBegin(GL_POINTS); glVertex2f(0.5,0.5); glVertex2f(-0.5,0.5); glVertex2f(0.5,-0.5); glVertex2f(-0.5,-0.5); glEnd(); glFlush(); } int main(int argc,char * * argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowPosition(0,0); glutInitWindowSize(240,240); glutCreateWindow(argv[0]); glutDisplayFunc(display); glutMainLoop(); return 0; }
? 效果图: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |