OpenGLES---OpenGL运行原理
2016-05-24 11:16
148 查看
{固定管线 1:VertexData 顶点数据 2:model matrix 模型矩阵 3:view matrix 观察矩阵 4:Projection Matrix 投影矩阵 5:Divide byw 标准化设备坐标系 6:Viewport Transform 视口 Object Coordinates 模型坐标系,也叫Local坐标系。例如我们3DMax,Maya等建模工具建立人物模型时, 模型中的顶点坐标值就是model坐标系的值,设想我们有好多个模型,那么每-个模型 都有属于自己的model坐标系 Eye Coordinates Camera坐标系是人的眼观察World坐标系时,以人眼为原点,视线方向为Z轴建立的新坐标系, 这个坐标系以观察者(眼睛)为中心,为视野裁切和投影等做好铺垫,随着观察者眼睛位置的变化 ,或者视线方向的变化,Camera坐标系也同时变化 Projection Matrix 投影矩阵 Projection即投影坐标系基于Camera坐标系变化而来的新坐标系,这个新坐标系把视野外的东西剔除掉, 把视野内的东西投影到屏幕(进裁面)上,并且离眼睛越远的东西看起来越小 Divide byw 标准化设备坐标系 它更像是窗口坐标系,只是还没有转换或者缩小到屏幕像素 Windows Coordinates(窗口坐标系)/ Screen Coordinates(屏幕坐标系) 将标准化坐标系(NDC)应用于视口转换,NDC将缩小和平移以便适应屏幕的透视 1:VertexData-----Object Coordinates(平移,旋转,缩放)---->2:model matrix----Eye Coordinates-->3:view matrix-------> 4:Projection Matrix----Clip Coordinates-----> 5:Divide byw-----Normalired Device Coordinatos----> 6:Viewport Transform---Windows Coordinates--> }
{渲染流程 API -->1:Vertex Arrays/Buffer Objects // 顶点缓冲区对象vbo/顶点数组对象vao -->2:VertexShader //顶点Shader -->3:PrimitiveAssembly //图元装配 -->4:Rasterization //光栅化 -->5:FragmentShader //片段Shader -->6:Per-FragmentOperations //美像素操作 -->7:Framebuffer //输出画面到缓冲区 1:Vertex Arrays/Buffer Objects 2:VertexShader //顶点Shader 空间坐标:就是把三维坐标转成屏幕坐标 纹理:生成并变换纹理坐标 光照:综合变换后顶点,表面法线,光源位置,材料属性以及其他光照信息进行光照计算 3:PrimitiveAssembly //图元装配 图元装配的一个主要内容就是剪裁,点剪裁就是简单地接受或拒绝顶点 4:Rasterization//光栅化 就是把几何数据和像素数据转换成片断(FragmentShader)的过程。 每个片断块对应于帧缓冲区中一个像素。 把顶点连接起来形成直线或者计算填充多边形的内部像素时,需要考虑直线和多边形的点画模式,直线的宽度,点的大小,着色模型以及用于支持抗锯齿处理的覆盖计算,每个片断方块都将具有各自的颜色和深度 5:FragmentShader 片段Shader 在数据实际存储到帧缓冲区之前,将要执行一系列的操作。 这些操作可能会修改甚至丢弃这些片断,所有这些操作都可以被启动或禁用。 第一个可能执行操作时纹理处理,在纹理内存中为每个片断生成一个纹理单元(texel,也就是纹理元素),并应用到这个片断上。 接着可能进行的是雾计算,然后是剪裁测试,alpha测试,模板测试和深度缓冲区测试。 如果一个片断无法通过一个启用的测试,它的连续处理过程可能会被中断。随后,将要执行的可能是混合,抖动,逻辑操作以及 根据一个位掩码的屏蔽操作。最后,进过完整处理的片断就被绘制到适合的缓冲区,最终成为一个像素并到达它的最终栖息地 6:Per-FragmentOperations //美像素操作 7:Framebuffer }
需要写代码的
-->2:VertexShader //顶点Shader
-->5:FragmentShader //片段Shader
相关文章推荐
- linux 下连接mysql服务器
- 阿里云上centos6安装docker问题!
- linux的bash 终端操作快捷键
- Linux 查看linux是64位还是32位
- CentOS 7.0安装配置Vsftp服务器
- 在MFC中使用OpenGL相关配置的整理总结
- 企业为什么需要建手机网站
- linux基础(29)--救援模式挽救数据--RHEL6.5
- iis发布网站
- Linux如何查找大文件或目录总结
- 实现多点跳跃登录Xshell使用教程
- linux中输入jps命令报错
- Nginx配置文件详细说明
- windows下apache+php+mysql环境搭建
- Nginx报错403 forbidden (13: Permission denied)的解决办法
- 如何建立Xshell中的日志文件
- VS2010实现opencv基于DCT的图像压缩
- find mtime参数+号,-号,不带符号的用法
- OpenCV滤波之copyMakeBorder和borderInterpolate
- GitHub Linux教程