glsl 橙宝书 笔记

来源:互联网 发布:蛇皮网络语是什么意思 编辑:程序博客网 时间:2024/04/28 08:30
glGetString Gl_EXTENSIONS  //可以确定由一个特定Opengl实现所支持的拓展。
专门用来绘制图形和保持显示屏内容的硬件被成为图形加速器 。通常有一个被奉陪来保持所显示内容的内存区域
利用显示内存在每一帧进行刷新
图形加速器中还有一个名为屏幕外内存的 内存区域,他是不可见的,用来存数不可见的内容 unvisible


#由于opengl渲染而修改的图形内存区域被成为 帧缓冲区
帧缓冲区 可能包含内容
- 至多4个颜色缓冲器 
- 一个深度缓冲
- 模板缓冲 stencil buffer (高级版深度缓冲)
- 积累缓冲区 accumulation buffer (高级版颜色缓冲,用途,景深,模糊)
- 多重采样缓冲区 multisample buffer (不会单独只有深度缓冲或者模板缓冲,帧缓冲区中每个像素包含颜色、深度和模板的多个采样)
双重缓存区 显示前台缓冲区的同时可以同时渲染到后台缓冲区 当渲染完成,交换两个缓冲区
对左眼使用一个颜色缓冲区,并对有眼使用一个缓冲区,就可以支持立体视图


在使用OpengGL中的光照功能时,注意要开启隐藏表面消除功能,所谓隐藏表面消除功能指消除实心物体被其他物体所遮挡的部分。深度缓冲区测试是实现这一功能的方法之一(最简单),通过比较新像素深度(离视平面的距离)与当前像素深度,将二者中距离较小者颜色设为该点像素颜色。因此,在实现隐藏面消除功能时,要开启深度缓冲区测试功能,即glEnable(GL_DEPTH_TEST),在重绘场景时,使用glClear()不仅重置了颜色缓冲区,也重置了深度缓冲区。
OpenGL通过环境光(Ambient Light)、散射光(Diffuse Light)、镜面反射光(Specular Light)以及发射光(Emissive Light)来模拟逼真的光照效果,前三种光属于光源属性,通过glLightfv()函数的GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR来设置光颜色,而最后一种光属于物体的材料属性,通过glMaterialfv()函数的GL_EMMISION来设置。


glenble gldisable
opengl 服务器端堆栈,glpushAttrib glPopAttrib
glGet 是一个通用的函数,可以用来查询图形环境的许多组件,比如GL_CURRENT_COLOR,GL_LINE_WIDTH  ,定义有符号常量


基本图元,图像,位图
渲染管线
基本图元 -  顶点计算操作 -图元组装 - 裁剪投影视口消隐 - 光栅化 -片元处理 - 片段操作 - 帧缓存操作
图像 - 像素解码 - 像素传输 -光栅化(传输像素组生成片段) and 纹理内存(传输纹理) - 片段处理
位图 = 像素编码 - 像素传输


绘制图元 立即模式:
1、一次一次的传顶点数据等进去,当满足要求时候自动组成相应图元
2、 用opengl api批量传数据进去,进行大批量的图元绘制
显示列表:
显示列表可以包括设置状态的命令一级绘制集合对象的命令,显示列表存在服务器端,可以通过调用glCallList/glCallLists来处理
有调用glNewList开始,glendList结束,相对来说,显示列表模式比立即模式更有性能上的优势


glcullface 消隐 提高效率,当当前视图是透视视图的时候,各个顶点都会将其xyzbuffer除以齐次坐标w。


光栅化:通过opengl管线传过来的数据,图元将分解成更小的单元,这些单元对应目标帧缓区中的像素。分解出来的称为片元
一个片元由一个窗口坐标,深度以及其他相关属性如颜色,纹理坐标等组成。
反走样 通过使用适当的符号常量 (GL_POINT_SMOOTH,GL_LINE_SMOOTH,GL_POLYGON_SMOOTH)


片元操作:
像素所有权测试,检测是否被遮挡
剪切测试,glscissor,是否被裁切了
alpha测试,使用片元的alpha和通过调用glalphafunc简历的函数来确定是否丢弃片元
模板测试 , 使用通过调用glstencilfunc和glstencilop建立的比较关系来讲模板缓冲区的值和一个参考值做比较,用以确定片元的命运
深度测试,比较z,确定是否绘制
混合,使用片元的颜色、存数在帧缓存的颜色以及blendfunc设置的参数来确定写入帧缓冲区的颜色
抖动,逻辑操作(使用通过gllogicop建立的逻辑操作将最终的片元值域帧缓冲中的值结合起来)


通过glTexImage 或者glTexSubImaage的调用而提供的像素值不会经历光栅化或者后面的片元处理过程,而是直接用来更新纹理内存


读取控制:
glReadPixels ,可以从帧缓存中读取像素矩形并将其返回到应用程序内存中,
glCopyPixels, 可以从帧缓存中读取他们并将他们写入帧缓存的另一个部分
0 0