版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/daoer_sofu/article/details/48548659
###1.Opengl GLSL:Opengl着色器语言,在GPU上执行的可编程渲染管线,区别于传统的固定管线,文件扩展名*.glsl。 OpenGL 1.0 版本中,支持固定管线,而 OpenGL 2.0 版本不再支持固定管线,只支持可编程管线。OpenGL ES是Opengl子集,支持嵌入式设备。OPenGL作为行业标准的接口层,从Windows退出ARB后,window默认的版本始终都是OpenGl 1.1,可以通过工具查询显卡支持的OpenGL版本,同时通过驱动升级提高Windows OpengGL版本(否则有一些异常问题出现) OpenGL中的gl库是核心库,glu是实用库,glut是实用工具库,gl是核心,glu是对gl的部分封装,glut是OpenGL的跨平台工具库 OPenGL分为:核心模式(不支持以前版本)和兼容模式(支持以前版本的函数) 状态变量: 1.Opengl State Value,保存Opengl中的相关参数设置,如glClearColor设置清除颜色保存在GL_COLOR_BUFFER_BIT变量中,可以把OPengl当做状态机,通过不同的状态变量开关(glEnable、glDisable只有两个状态的变量)控制,实现不同的显示效果。 2.状态变量分为服务端和客服端变量(变量的存储位置相关),变量需要硬件实现的支持 https://www.opengl.org/documentation/specs/version1.1/glspec1.1/node12.html#SECTION00520000000000000000 http://www.glprogramming.com/red/appendixb.html http://wwwhome.ewi.utwente.nl/~dennisr/elckerlycjavadoc/hmi/graphics/opengl/GL30_Constants.html 基本设备: 1.帧缓冲区(glutInitDisplayMode(多种模式混合设置)):
a.深度缓冲区(z值越大离相机越远,又称Z缓冲区,GL_DEPTH_BITS) glGenBuffers创建缓冲区,glBindBuffer绑定缓冲区,glBufferData填充缓冲区 glEnable(GL_DEPTH_TEST)启动深度测试(遮挡关系);glEnable(GL_SCISSOR_TEST)启动裁剪测试(裁剪窗口内进行渲染)glDepthRange(设置z抽范围) 内存:OPenGL客户端,glEnableClientState 显卡:OPenGL服务端,glEnable b.颜色缓冲区(GL_RED_BITS, GL_GREEN_BITS, GL_BLUE_BITS, GL_ALPHA_BITS,GL_INDEX_BITS) c.模板缓冲区(GL_STENCIL_BITS) d.累积缓冲区(GL_ACCUM_RED_BITS, GL_ACCUM_GREEN_BITS, GL_ACCUM_BLUE_BITS, GL_ACCUM_ALPHA_BITS) 双缓冲技术,提供非缓冲区到缓冲区的拷贝,提升绘图效率
glflush(提交数据到缓冲区) glfinish(同glflush并等待设备执行完返回) glClearDepth(像素深度值0~1) 顶点属性: 坐标,颜色,法线,纹理
2.着色器(Shader):
GLSL语言: a.变量:bvec2(2个bool值得向量)、mat2x3(2*3浮点数矩阵)、sampler1DShadow(一维深度纹理句柄)、struct结构体、a[ ]数组 b.修饰符:const常量只读、attribute只读顶点属性、uniform一致变量(只读编译器未知)、varying顶点着色器输出、in输入、out输出、inout、invariant、centorid varying c. 内置变量:gl_Color顶点着色器或片段着色器的主颜色
3.坐标系:
世界坐标(WC 屏幕原点)、物体坐标(MC 模型移动时坐标系不变,只是移动模型)、设备坐标(视区或视口DC)、眼坐标(z轴方向VC) OpenGL坐标变换栈(ModeView)、正交变换、透视变换(近大远小) 仿射变换:齐次坐标系,第四分量0表示向量,第四分量1表示点 相关函数: glViewPort视口设置(视景体变换到视口) glOrtho(视景体设置) glTranslate(模型坐标系平移) glRotate(模型坐标系旋转) glScale(模型坐标系缩放) glMatrixMode(变换模式设置) glloadindentity(移动模型坐标到视口原点) glPushMatrix(获取当前栈顶矩阵压栈到新栈中) glLoadMatrix(矩阵栈顶重赋值) glMultiMatrix(栈顶相乘) glGetFloatV(获取矩阵可以保存当前模型矩阵实现多个模型矩阵切换) glDrawArrays(绘制顶点数组) glDrawElements(按索引数组,绘制顶点数组----两个数组) glDrawRangeElements(按索引数组,绘制顶点数组的任意段) OpenGL四种矩阵堆栈: GL_MODELVIEW(模型变换):gluLookat视口变换 GL_PROJECTION(投影变换):glFrustum 3D透视投影、-gluPerspective 2D透视投影、glOrtho3D正交投影 GL_TEXTURE:纹理坐标(glEnable启用) GL_COLOR:颜色平面
4.纹理:
相关函数: glGenTextures创建纹理对象索引 glBindTexture绑定纹理对象 glTexImage2D对象赋值(像素RGB) 纹理对象: GL_TEXTURE_1D、GL_TEXTURE_2D、 GL_TEXTURE_3D、GL_TEXTURE_CUBE_MAP 纹理坐标: S、T、R三个轴,范围(0~1),超出范围使用glTexParamteri设置,纹理坐标描述纹理与顶点的映射关系 glTexCoord控制坐标、glTexGen纹理坐标自动生成 (纹理坐标:strq(q缩放用) 顶点坐标:xyzw) 多模型贴纹理: 需要同时控制glEnale和glDisable,保证纹理对其他绘制无影响 图片处理: http://www.cnblogs.com/IamEasy_Man/archive/2009/12/14/1624062.html
5.光照和材质:
法向量 glNormal: 光照阴影效果CrossVertex向量叉乘,光照下glColor3f等颜色属性失效 材质(glEnable(GL_COLOR_MATERIAL)): 材料和RGB三原色光照反色后形成的颜色反差。 光源和材质都有三种: 环境光反射(Ambient),漫反射(Diffuse),镜面反射(Specular)
6.RC渲染上下文和DC设备上下文:
获取DC,设置像素格式,wglCreateContext通过DC创建RC管线(管道技术),wglMakeCurrent选择当前RC,DC通过GDI接口传递到图形设备(IPC通信:管道|邮槽–内存中进程管理机制,文件映射–磁盘,socket–网卡) 全屏模式: ChangeDisplaySettings设置系统分辨率,OPenGL没有独占资源的全屏模式,只有窗口模式 http://blog.csdn.net/pizi0475/article/details/6269844 帧控制: http://www.cnblogs.com/yxnchinahlj/archive/2010/11/19/1881781.html 绘制图形(推荐使用glut框架入门opengl): 1.立即模式绘图:glBegin、glvertex、glEnd(固定渲染管线) 2.顶点数组绘图:glDrawArrays 3.Display List绘图:glNewList 重复绘制内嵌1或2绘图方式 4.VBO、IBO、VAO对象绘图:VAO负责顶点属性(glGenVertexArrays、glDeleteVertexArrays和glBindVertexArray),可以包含多个VBO和IBO,相当于容器,最终对象绑定到Context设备上下文中。(Shader方式的可编程渲染管线) 抗锯齿(glHint): GL_POINT_SMOOTH_HINT(点采样glPointSize,启动抗锯齿点是圆的,否则是方的) GL_LINE_SMOOTH_HINT(线采样glLineWidth) GL_POLYGON_SMOOTH_HINT(多边形采样) glLineStipple线的点化处理(虚线等) 线的模糊处理,消除锯齿glEnable(GL_BLEND)、glBendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA) GL_POINTS点、GL_LINES线、GL_TRIANGLES三角形、GL_QUADS四边形、GL_POLYGON多边形 GL_TRIANGLES_STRIP(偶数顶点n-2n-1n,奇数顶点n-1n-2n) GL_QUAD_STRIP(nn 1n 3n 2)
7.字体:
显示列表(静态方式绘图,提升效率): glGenList产生显示列表数组,返回索引,glNewList|glEnd绘制,glCallList调用 字体绘制: glGenlist生成数组,wglUseFontBitmaps绑定显示列表数组到DC(wglgetcurrentDC获取dc),glCallList单个显示调用(需要循环) 字体设置两种方法wglUseFontBitmaps、wglUseFontOutline 光栅化:数据转化为计算机可显示的像素格式(设置光栅位置:glRasterPos) http://www.cnblogs.com/mattins/p/4126298.html
8.调试(glEnable(GL_DEBUG_OUTPUT)):
1.glGetError获取错误信息 2.gl_ARB_debug_output 3.相关调试工具下载 http://apitrace.github.io/#download
9.Shader工具: 1.RenderMonkey 设备支持: 1.glview(OpenGL Extensions Viewer)查看OPengl扩展 2.GPU caps viewer查看OpenGl版本 参考: http://www.360doc.com/content/14/1028/10/19175681_420522404.shtml http://my.oschina.net/sweetdark/blog/172316 http://my.oschina.net/sweetdark/blog/208024(GLSL) http://blog.csdn.net/racehorse/article/details/6638455(GLSL example) http://blog.csdn.net/zhongjling/article/details/8488844(坐标变换) https://msdn.microsoft.com/en- us/library/windows/desktop/dd368810(v=vs.85).aspx(Opengl 状态变量) http://blog.csdn.net/wu_xiangwei/article/details/5519298 http://blog.sina.com.cn/s/blog_3ca90a0b0101frnv.html(Opengl调试工具) http://blog.csdn.net/iduosi/article/details/7835624(绘图相关) http://dev.gameres.com/Program/Visual/3D/openglhw.htm(OPengl扩展) ###2.DirectX HLSL:DirectX着色器语言,文件扩展名*.fs CG:支持Opengl和DirectX的着色器C语言编程 ###3.OpenCV 计算机视觉处理库 ###4.OpenCL(amd显卡程序,cuda nvidia程序) 调用GPU、CPU图形计算的框架,绘图需要OpenGL支持