初学opengl
来源:互联网 发布:淘宝复制别人店铺装修 编辑:程序博客网 时间:2024/06/05 04:46
1、以下函数用于设置每个缓冲区的清除值,清除命令设置的值一直保持有效,直到再次用同一个命令对他们进行修改
- void glclearColor(GLclampf red, GLclampf green, GLclampf blue, GLcalmpf alpha) ;
指定RGBA(Red、Green、Blue、Alpha(alpha并不直接显示,它通常用于控制颜色的混合。表示不透明度,1.0表示完全不透明,0.0表示完全透明)的色彩空间)模式下的颜色缓冲区的当前清除值。GLclampf为在0和1之间的32为浮点型小数,默认值都为0。如glClearColor(0.0,0.0,0.0,0.0)表示清除值为黑色。
- void glClearIndex(GLfloat index);
- void glClearDepth(GLclampd depth);
- void glClearStencil(GLint s);
- void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
累积缓冲区,GLfloat默认值都为0
2、选择了清除值,并准备清除缓冲区时,可以使用glClear()函数即glClear()函数完成清除任务。
- void glclear(GLbitfield mask);
GLbitfield:可以使用|运算符组合不同的缓冲标志位,表明需要清除的缓冲。
mask标志位有如下:<1>GL_COLOR_BUFFER_BIT 用于清除RGBA颜色缓冲区或颜色索引缓冲区(取决于系统使用的是那种颜色模式)
<2>GL_DEPTH_BUFFER_BIT 深度缓冲
<3>GL_ACCUM_BUFFER_BIT 累积缓冲
<4>GL_STENCIL_BUFFER_BIT 模板缓冲
3、RGBA模式与颜色索引模式的区别
- RGBA模式
图1-1
- 颜色索引模式
在颜色索引模式下,OpenGL使用一个颜色表(或查找表),就像用一个调色板来调出场景需要的各种颜色。画家的调色板提供了很多小格子用于调色;类似的,计算机的颜色表提供很多索引,供RGB值进行混合,如图1-2所示。
图1-2
4、glcolor()函数确定了绘制物体所使用的颜色,需要注意的是,如果在glBegin()与glEnd()函数之间多次连续调用颜色函数,那么,只会显示出最后一次的颜色。glColor3b,glColor4b glColor3s glColor4s,glColor3i,glColor4i需要3个或4个无符号字节,或长或短的整数作为参数。当v附加到该名称,颜色命令可以采取这种数值的数组的指针。
例如:glColor3f(1.0,0.0,0.0);
GLfloat color_array[] = {1.0,0.0,0.0};
glColor3fv(color_array);
glColor3f(0.0, 0.0, 0.0); --> 黑色
glColor3f(1.0, 0.0, 0.0); --> 红色
glColor3f(0.0, 1.0, 0.0); --> 绿色
glColor3f(0.0, 0.0, 1.0); --> 蓝色
glColor3f(1.0, 1.0, 0.0); --> 黄色
glColor3f(1.0, 0.0, 1.0); --> 品红色
glColor3f(0.0, 1.0, 1.0); --> 青色
glColor3f(1.0, 1.0, 1.0); --> 白色
5、opengl函数可以在它们的参数中接受多达8种不同的数据类型,类型定义如表1-1。
图1-3
7、glFlush()函数用于强制刷新缓冲,保证绘图命令将被执行,而不是存储在缓冲区中等待其他的OpenGL命令。OpenGL是用一条渲染管线线性处理命令的,它的绘图机制是:先用 OpenGL 的绘图上下文 Rendering Context (简称为 RC )把图画好,再把所绘结果通过 SwapBuffer() 函数传给 Window 的 绘图上下文 Device Context (简记为 DC)。要注意的是,程序运行过程中,可以有多个 DC,但只能有一个 RC。因此当一个 DC 画完图后,要立即释放 RC,以便其它的 DC 也使用。
- glFlush应用场合:
<1>在系统内存中创建图像的软件渲染程序,并且并不想经常更新屏幕。
<2>在那些收集成批的渲染命令以及降低启动开销的opengl实现中。网络传输就属于这种情况。
- glFlush()与glFinish()区别:
(1)gLFlush()作用是将缓冲区中的指令(无论是否为满)立刻送给图形硬件执行,发送完立即返回;
(2)glFinish()作用也是将缓冲区中的指令(无论是否为满)立刻送给图形硬件执行,但是要等待图形硬件执行完这些指令才返回。
(3)如果需要执行一些同步性的任务,就可能要用到glFinish()。
如果调用glFinish,通常会带来性能上的损失。因为它会是的GPU和CPU之间的并行性丧失
8、函数原型:
glVertex4i, glVertex4s, glVertex2dv, glVertex2fv, glVertex2iv, glVertex2sv, glVertex3dv, glVertex3fv, glVertex3iv,glVertex3sv, glVertex4dv, glVertex4fv, glVertex4iv, glVertex4sv
例子:
glVertex3f(GLfloat x, GLfloat y, GLfloat z);
函数说明:
glVertex函数用在glBegin和glEnd之间,除此以外没有意义。用来指定点、线和多边形的顶点。当调用glVertex时,可以为该顶点指定颜色、法线量和纹理坐标。当只指定x,y时,z缺省为0.0,w缺省为1.0;当只指定x、y和z时,w缺省为1.0
- OpenGL初学
- 初学OpenGL
- 初学opengl
- 初学OpenGL
- OpenGl初学
- OpenGL初学笔记
- OpenGL初学 函数使用见解
- Graphics Performance [opengl 初学]
- 初学opengl(二)画散点图
- openGL 初学 glut库的应用
- [Android实例] Android OpenGl初学分享
- android OpenGL ES2.0编程初学
- 初学opengl简单总结(一)
- openGL初学笔记 - gluPerspective 与 gluLookAt
- 初学Android OpenGL的一些心得
- OpenGL初学记录_星系环绕漫游
- 初学OpenGL之VBO、VAO、EBO\IBO
- 初学Android,OpenGL ES之绘制平面多边形(八十)
- 设计模式入门之访问者模式Visitor
- UVa 11385 - Da Vinci Code
- Python图表绘制:matplotlib绘图库入门
- vim打开文件有^M结尾
- JAVA学习笔记 基础篇
- 初学opengl
- 抽象工厂模式
- jump game
- CSS3动画帧数科学计算法
- 连续子数组最大和 python版实现
- 多线程
- Lucas定理--大组合数取模 学习笔记
- [转]TI低功耗蓝牙(BLE)介绍 写的比较好,转过来的
- hdu 3944 Lucas定理--大组合数取模 多校赛