OpenGLES2.0基础(5)
来源:互联网 发布:淘宝类目会影响排名吗 编辑:程序博客网 时间:2024/06/17 22:18
(1)渲染:计算机根据模型创建图形的过程。
(2)模型:根据几何图元创建的,也成为物体。
(3)几何图元包括点、直线、多边形等,它们都是通过顶点指定的。
简单地说,纹理就是矩形的数据数组。例如,颜色数据、亮度数据、颜色和alpha数据。纹理数组中的单个值常常成为纹理单元(texel)。纹理贴图之所以复杂,是因为矩形纹理可以映射到非矩形区域,并且以合理方式实现。
OpenGL两个基本的过滤模式:最近邻过滤和双线性插值。还有其他的过滤模式
投影变换是一种很关键的图形变换,OpenGL中只提供了两种投影方式,一种是正射投影,另一种是透视投影。
正射投影,又叫平行投影。这种投影的视景体是一个矩形的平行管道,也就是一个长方体,如图所示。正射投影的最大一个特点是无论物体距离相机多远,投影后的物体大小尺寸不变。这种投影通常用在建筑蓝图绘制和计算机辅助设计等方面,这些行业要求投影后的物体尺寸及相互间的角度不变,以便施工或制造时物体比例大小正确。
透视投影符合人们心理习惯,即离视点近的物体大,离视点远的物体小,远到极点即为消失,成为灭点。它的视景体类似于一个顶部和底部都被切除掉的棱椎,也就是棱台。这个投影通常用于动画、视觉仿真以及其它许多具有真实性反映的方面。OpenGL透视投影函数也有两个,其中函数glFrustum()。
vertex shader(顶点shader)发生在顶点变换阶段,通过顶点shader可以修改一些基本的图元属性,颜色,光照,发现等;
fragment shader(片段shader)主要发生在 纹理着色阶段,主要是对上一阶段输出的数据,进行再次加工。
----------------------------------------
> openGL窗口与视口
屏幕:即计算机的整个屏幕大小。
窗口:即屏幕中的某一个窗口,可放大放小和移动关闭。
视口:即窗口还可以分为若干个区域,称为视口,窗口中用来绘图的区域。一般设置视口大小等于窗口大小。
裁剪窗口:即在视口中让你看到的图形,即显示出来的那部分。
关系:当要把图形绘制在屏幕之前,首先要建立图形的几何描述,即建模,这往往是在世界坐标系内进行的。而图形最终是要显示在屏幕上,即屏幕坐标系。在模型的二维区域内选择一个区域,映射到屏幕坐标系的指定区域(窗口)中。在这个映射过程中包括平移、旋转、缩放操作及删除位于显示区域范围以外的图形部分。也就是OpenGL绘制图形时,并不是把整个模型直接绘制在整个屏幕上,而是把模型的部分绘制在窗口内。窗口还可以分为若干个区域,称为视口。模型在裁剪窗口内的部分映射到显示窗口中的指定视口中。窗口选择显示模型的那个部分,而视口指定显示在窗口的什么位置。
> openGL抖动技术,openGL误差扩散技术
Dalvik方案是Android主要特点之一,但是,如果代码运行在虚拟机内部,那它怎么与OpenGL通信呢?有两种技术,第一种技术是使用Java本地接口JNI,这个技术已经由Android软件开发部提供,当调用android.opengl.GLES20包里方法时,软件开发包实际上就是在后台使用JNI调用本地系统库。
第二种技术就是改变内存分配的方式,Java有一个特殊的类集合,它们可以分配本地内存块,并且把Java数据复制到本地内存。本地内存可以被本地环境存取,而不受垃圾回收器的管理。
顶点着色器:生成每个顶点的最终位置,针对每个顶点,它都会执行一次,一旦最终位置确定了,OpenGL就可以这些可见顶点的集合组装成点,直线以及三角形。
片段着色器:为组成点,直线或者三角形的每个片段生成最终的颜色,针对每个片段,它都会执行一次,一个片段是一个小小的,单一的颜色的长方形区域,类似于计算机屏幕上的一个像素。
》OpenGL裁剪算法:Cohen-Sutherlend算法,Sutherland-Hodgeman算法
裁剪就是来确定:
1.哪些是位于视景体内,应当被最后成图来考虑的
2.哪些是位于视景体外,不需要后续的处理了(因为不属于成图范围嘛)
Cohen-Sutherlend算法,这是一种很巧妙的裁剪算法,运用了编码的思想;先考虑二维的裁剪,即一条二维的线段和一个方形的裁剪区域
一、3D渲染管线工作流程 二、可编程管线 三、着色器语言
着色器语言
低级:LLSL AGAL
高级:Cg HLSL GLSL
可能产生三种新的类型的光线:反射、折射与阴影。
OpenGL、Direct3D这样非常流行的光栅化渲染器。事实上,这些大部分应用于游戏制作的API主要为实时渲染(Real-time Rendering)而设置,而它们所采用的光栅化(Rasterization)的渲染方式,通过渲染大量的三角形(或者其他的几何图元种类(Primitive types))。
阴影(Shadow)、反射(Reflection)、折射(Refraction)均为全局照明(Global Illumination)效果,所以在实际应用中,栅格化渲染系统可以使用预处理(如阴影贴图(shadow mapping)、环境贴图(environment mapping))去模拟这些效果。
栅格化的最大优势是计算量比较小,适合实时渲染。相反,全局光照计算量大,一般也没有特殊硬件加速(通常只使用CPU而非GPU),所以只适合离线渲染(offline rendering),例如3D Studio Max、Maya等工具。其中一个支持全局光照的方法,称为光线追踪(ray tracing)。光线追踪能简单直接地支持阴影、反射、折射。
在简单光照明模型中,反射被分为理想漫反射和镜面反射光,把透射光模型分为理想漫透射光和规则透射光。光线在物体之间的传播方式是光线跟踪算法的基础。最基本的光线跟踪算法是跟踪镜面反射和折射。
光线跟踪思路:从视点出发,通过图像平面上每个像素中心向场景发出一条光线,光线的起点为视点,方向为像素中心和视点连线单位向量。光线与离视点最近的场景物体表面交点有三种可能:
1.当前交点所在的物体表面为理想漫射面,跟踪结束。
2.当前交点所在的物体表面为理想镜面,光线沿其镜面发射方向继续跟踪。
3.当前交点所在的物体表面为规则透射面,光线沿其规则透射方向继续跟踪。
任意局部光照模型(opengl使用的是phong模型)
从数学角度来说,摄影机透过投影(projection),把三维空间投射到二维空间上。常见的投影有正投影(orthographic projection)、透视投影(perspective projection)等等。
OpenGL ES着色器语言之变量和数据类型- http://www.xuebuyuan.com/1980605.html#title-0
OpenGL 着色器语言- http://blog.csdn.net/bnrmaster/article/details/47179363
OpenGL着色器语言实际上是多种密切相关的语言组成的,这些语言被用作 为OpenGL渲染管线内各个可编程处理器建立着色器,有:顶点处理器,曲面控制处理器,曲面计算处理器,几何处理器,片元处理器,计算处理器。
锯齿边(Jagged Edge)出现的原因是由顶点数据像素化之后成为片段的方式所引起的。
走样(Aliasing)。有很多技术能够减少走样,产生更平滑的边缘,这些技术叫做抗锯齿技术(Anti-aliasing,也被称为反走样技术)。多采样抗锯齿(Multisample Anti-aliasing)或叫MSAA。
为了理解什么是多重采样(Multisampling),以及它是如何解决锯齿问题的,我们先要更深入了解一个OpenGL光栅化的工作方式。现在引擎都是跨平台的,所以引擎的底层技术也是使用OpenGL实现的,我们现在讨论的技术也是 基于OpenGL的。
光栅化是你最终经处理的顶点和片段着色器之间的所有算法和处理的集合。光栅化将属于一个基本图形的所有顶点转化为一系列片段。顶点坐标理论上可以含有任何坐标,但片段却不是这样,这是因为它们与你的窗口的解析度有关。几乎永远都不会有顶点坐标和片段的一对一映射,所以光栅化必须以某种方式决定每个特定顶点最终结束于哪个片段/屏幕坐标上。
有两种方式可以创建多采样缓冲,并使其成为帧缓冲的附件:纹理附件和渲染缓冲附件。光栅化是把几何和像素数据转化成片段,每个片段块对应帧缓冲区中的一个像素。
存储有图像数据的二维数组可以通过两种方式生成:(1)位图纹理(Bitmap Texture),通过电脑的数字照片、图片等生成二维的数组数据;(2)过程纹理(Procedural texture),通过数学公式来生成一个二维的数组数据。
关于OpenGL+GLSL深度贴图采样- http://www.linuxidc.com/Linux/2014-03/98795.htm
在GLSL中,存在着sampler2D和sampler2DShadow两种2D贴图采样器。在对一个深度贴图(指内部格式为GL_DEPTH_COMPONENT或GL_DEPTH_STENCIL的贴图)进行采样时,可以使用前述两种2D贴图采样器其中的一种进行采样。对两种2D贴图采样器取舍,与贴图对比模式(Texture Comparison Modes)有关。
- OpenGLES2.0基础(5)
- OpenGLES2.0基础(3)
- OpenGLES2.0基础(4)
- OpenGLES2.0基础及着色器语言(2)
- Android OpenGLES2.0(一)——了解OpenGLES2.0
- Android OpenGLES2.0(一)——了解OpenGLES2.0
- openglES2.0 时代来临?
- opengles2.0中的纹理
- opengles2.0 shader备忘
- OpenGLes2.0 什么是Pbuffer
- ndk opengles2.0 配置
- Opengles2.0入门
- 浅学OpenGLES2.0
- 浅学OpenGLES2.0
- 浅学OpenGLES2.0
- OpenGLES2.0笔记
- OpenGLES2.0 概念
- OpenGLES2.0原理浅析
- 完整的Spring-boot实现(部门与员工)
- TortoiseGit处理代码冲突
- 【AKKA 官方文档翻译】第一部分:Actor架构
- Kafka无消息丢失配置
- 【AKKA 官方文档翻译】第二部分:创建第一个actor
- OpenGLES2.0基础(5)
- js中Base64
- macbook磁盘容量不够了!!!
- 点餐系统开发总结:
- 详解SLIM与GLSLIM推荐模型
- 【AKKA 官方文档翻译】第三部分:与设备Actor一起工作
- java代码中init method和destroy method的三种使用方式
- 大数据学习系列之五 ----- Hive整合HBase图文详解
- codeforces 41A Translation