OPengl、DirectX、OPenCV、OpenCL

版权声明:本文为博主原创文章,遵循 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纹理坐标自动生成   (纹理坐标:s\t\r\q(q缩放用)  顶点坐标:x\y\z\w) 多模型贴纹理:   需要同时控制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-2\n-1\n,奇数顶点n-1\n-2\n)   GL_QUAD_STRIP(n\n+1\n+3\n+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支持

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据森麟

世界上最有价值的不是石油,而是数据!

"The world's most valuable resource is no longer oil,but data"

6220
来自专栏IT可乐

Java虚拟机详解(七)------虚拟机监控和分析工具(1)——命令行

  通过前面的几篇博客,我们介绍了Java虚拟机的内存分配以及内存回收等理论知识,了解这些知识对于我们在实际生产环境中提高系统的运行效率是有很大的帮助的。但是话...

13220
来自专栏数据森麟

爬过这些网站才算会爬虫

网络上有形形色色的网站,不同类型的网站爬虫策略不同,难易程度也不一样。从是否需要登陆这方面来说,一些简单网站不需要登陆就可以爬,比如之前爬过的猫眼电影、东方财富...

12820
来自专栏老沙课堂

isa详解(一)isa结构

为什么要用union以及位运算呢。因为在计算机中为二进制。位运算是最快速的计算方式 union C++ 中的共用体。顾名思义 就是在union 中 公用一个内存...

14330
来自专栏彭湖湾的编程世界

【CSS】CSS特效集锦,视觉魔法的碰撞与融合(一)

在本文中我讲述了7种CSS的特效,它们也许看起来并不惊艳,但是我认为却足够传达本文的理念:编写一些特殊的CSS样式的时候需要不拘于常理,要用特殊的认识角度看待标...

13110
来自专栏蛰虫始航

Jupyter Notebook导出包含中文的pdf

Jupyter Notebook是很好的数据科学创作环境。Jupyter提供导出的格式有 .py、.html、.md、.pdf等。目前用其导出包含中文的pdf会...

15510
来自专栏张俊红

Jupyter Notebook如何导出包含中文的 PDF?

Jupyter Notebook是很好的数据科学创作环境。Jupyter提供导出的格式有 .py、.html、.md、.pdf等。目前用其导出包含中文的pdf会...

44820
来自专栏salesforce零基础学习

Salesforce LWC学习(六) @salesforce & lightning/ui*Api Reference

上一篇中我们在demo中使用了很多的 @salesforce 以及 lightning/ui*Api的方法,但是很多没有细节的展开。其实LWC中针对这些modu...

9630
来自专栏孤独的S

python---爬取英雄联盟皮肤图片

爬LOL的皮肤高清图片的大致步骤就是用selenium去爬取英雄联盟所以英雄的皮肤的url地址,然后在用requests库去将图片下载到本地。

6740
来自专栏salesforce零基础学习

Salesforce LWC学习(三) import & export / api & track

我们使用vs code创建lwc 时,文件会默认生成包含 template作为头的html文件,包含了 import LightningElement的 js...

12520

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励