坐标变换

OpenGL ES 2.0入手

一曲冷凌霜 提交于 2020-11-24 13:24:21
本人从事android开发已有两年,今年三月份才开始看了一本叫《OpenGL ES 2.0 for android》的书,受益颇大,算是入了一个门。随后,在北京找一个公司实习,参与的是一个基于openfire的IM交易平台android客户端的开发,在1月份恰好简单研究过openfire以及asmark、xmpp。在实习公司呆了两个月,回校做毕业设计,做的是一个基于web的项目,花了一个月的时间。毕业后,由于诸多原因,离开了实习公司。七月份入职一个做室内地图的公司,公司6月份创办,进去时包括我在内四个人:总经理,数据部经理,软件研发部经理外加我这个小喽啰。引擎android sdk开发中用到OpenGL,我也有一段时间没看了,这次有重新拾起。废话到此为止,这也是我的处女座,排版不对、讲解不对之处请多多指教。同时建议入手OpenGL的小伙伴们可以选择OpenGL ES,难度应该较小些。小弟只是初学者,还望各位大神多多指点。 对于一个初学者来时,最难的是入门,而又往往难以抓住一些关键地方。只有反复淌过一条河,才能知道这条河哪个地方有湍流,哪个地方有暗礁。要想入门OpenGL(OpenGL ES 2.0),我个人觉得可以再这几点来把握: 坐标变换。 视角设置。 着色器(Shader)。 下面点到即止的来说一下这几个点。对于OpenGL里面的坐标系主要需关注的是:物体坐标系,世界坐标系

GPU图形绘制管线

萝らか妹 提交于 2020-03-26 07:14:59
摘抄“GPU Programming And Cg Language Primer 1rd Edition” 中文名“GPU编程与CG语言之阳春白雪下里巴人”第二章。 图形绘制管线描述GPU渲染流程,即“给定视点、三维物体、光源、照明模式,和纹理等元素,如何绘制一幅二维图像”。本章内容涉及GPU的基本流程和实时绘制技术的根本原理,在这些知识点之上才能延伸发展出基于GPU的各项技术,所以本章的重要性怎么说都不为过。欲登高而穷目,勿筑台于浮沙! 本章首先讨论整个绘制管线(不仅仅是GPU绘制)所包含的不同阶段,然后对每个阶段进行独立阐述,最后讲解GPU上各类缓冲器的相关知识点。 在《实时计算机图形学》一书中,将图形绘制管线分为三个主要阶段:应用程序阶段、几何阶段、光栅阶段。 应用程序阶段,使用高级编程语言(C、C++、JAVA等)进行开发,主要和CPU、内存打交道,诸如碰撞检测、场景图建立、空间八叉树更新、视锥裁剪等经典算法都在此阶段执行。在该阶段的末端,几何体数据(顶点坐标、法向量、纹理坐标、纹理等)通过数据总线传送到图形硬件(时间瓶颈);数据总线是一个可以共享的通道,用于在多个设备之间传送数据;端口是在两个设备之间传送数据的通道;带宽用来描述端口或者总线上的吞吐量,可以用每秒字节(b/s)来度量,数据总线和端口(如加速图形端口,Accelerated Graphic Port,AGP

关于矩阵

孤街浪徒 提交于 2020-03-21 22:42:27
本章所写都是通过对《工程学线性代数》和《3D数学基础:图形与游戏开发》理解所写 “不幸的是,没人告诉您矩阵像什么——您必须自己去感受。” 来自《 黑客帝国 》对白 .我们曾宣称矩阵表达坐标转换,多以当我们观察矩阵的时候,我们是在观察转换,观察新的坐标系。打这个转换开起来像什么?特定的3D矩阵(旋转,放射等)和3X3矩阵的9个数字之间有什么关系?怎么样构建一个矩阵来做这个转换(而不是盲目的照搬书上的公式)?——3D数学基础 矩阵分为实矩阵和复矩阵,元素是实数的矩阵为实矩阵,元素是复数的为复矩阵。 关于复数: http://www.cnblogs.com/ThreeThousandBigWorld/archive/2012/07/21/2602588.html 单位矩阵我们记做E 转置矩阵: 用 ' 表示转置因为右上角的小t打不出来,a为实数 1)(A')' = A; 2) (A+B)' = A' + B'; 3) (aA)' = aA'; 4) (AB)' = B'A'. 由n阶方阵A的元素所构成的行列式(个元素的位置不变),称为方阵A的行列式,记做|A|或detA 1)|A'| = |A| 2) |aA| = a^n|A| 3) |AB| = |A||B| 伴随矩阵: 行列式|A|的各个元素的代数余子式Aij所构成的矩阵然后再转置就是矩阵A的 伴随矩阵 , 记做A* AA* = A

OpenGL超级宝典笔记——新的模式

▼魔方 西西 提交于 2020-02-28 19:51:52
在传统上,图形硬件设计的目标是快速地执行相同的硬编译的计算指令集。计算的步骤可以被跳过,参数可以被调整,但计算本身却是固定的。所以旧式的GPU设计被称为是“固定功能”的。现在的趋势是朝着通用图形处理器的方向发展。就像CPU一样,GPU也可以用任意的指令序列来执行图形计算。GPU和CPU最大的区别是,GPU的浮点数计算能力更强。 在OpenGL2.0之前是固定函数渲染管线,在OpenGL2.0之后就是可编程函数渲染管线了。 走出旧的模式 在替换掉旧的模式之前,我们来回顾一下传统的OpenGL渲染管线是如何运作的。在第一阶段的是基于顶点操作,然后是图元的光栅化产生片段,最后在写到帧缓冲区前,执行片段的纹理,雾和其他的操作。如下图,下面分别讨论基于顶点和基于片段的操作。 固定的顶点处理 基于顶点的阶段以一系列顶点的属性作为输入。这些输入包括物体空间坐标,法线,主颜色,辅助颜色,纹理坐标。最终处理输出的结果为裁剪空间坐标,正面和背面的主颜色和辅助颜色,雾坐标,纹理坐标,以及点的大小。这个处理过程被分为四个阶段。 顶点变换 在传统的固定函数管线中,顶点坐标从物体空间转换到裁剪空间。首先乘以模型视图矩阵转换到视觉空间,然后再乘以投影矩阵变换到裁剪空间。与者两个矩阵相乘是固定的程序,要“跳过”这个过程,就是把这两个矩阵都通过glLoadIdentity设置为单位阵。这样就不会产生影响

Transform

泪湿孤枕 提交于 2020-02-27 21:57:32
Variables 变量 position The position of the transform in world space. 在世界空间坐标transform的位置。 localPosition Position of the transform relative to the parent transform. 相对于父级的变换的位置。 eulerAngles The rotation as Euler angles in degrees. 旋转作为欧拉角度。 localEulerAngles The rotation as Euler angles in degrees relative to the parent transform's rotation. 旋转作为欧拉角度,相对于父级的变换旋转角度。 right The red axis of the transform in world space. 在世界空间坐标变换的红色轴。也就是x轴。 up The green axis of the transform in world space. 在世界空间坐标变换的绿色轴。也就是y轴。 forward The blue axis of the transform in world space. 在世界空间坐标变换的蓝色轴。也就是z轴。 rotation The

游戏 图形方面 面试题

∥☆過路亽.° 提交于 2020-02-23 19:34:49
图形学渲染流程(管线)说一下 答: 传统的前向渲染管线流程是这样的 顶点和索引到顶点着色器,这里主要是对顶点进行变换,然后是光栅化,这里将剔除视锥体之外的元素,光栅化后三角形内的像素将进入到片元着色器(像素着色器),经过深度测试(模板测试)后写入到Target缓冲区内。 其实还有计算shader,用于曲面细分的三个shader,几何shader,RayTrace shader等,不展开了。 BDRF函数 答:BRDF函数是射出光线的辐照度和摄入光线辐射率的比值,在现代引擎中BRDF一般使用Cook-Torrance 的公式,定义为F菲涅尔(F0,NV) G(L,N,V) 几何函数 D(N,H,Roughness) 法线分布函数(H为L,V的半角向量) 除以4*(NL)*(NV) IBL基本原理 答: 在PBR渲染公式中,我们不仅仅算直接光源,也要考虑来自环境的间接光源,因此把来自环境光的信息储存在cubeMap中供计算,这就是IBL,基于图形的光照,在这种情况下需要对光照方程进行分割,分为环境光和镜面光两部分,为了提高速度一般都会把这些卷积的结果存储在贴图里面,对于漫反射,存不同法线下的卷积结果,对于高光需要先分拆为 预滤波环境贴图和预计算BRDF,这里有一个N=V=R的假设,基于重要性采样,可以把第二项看为参数为NWi和Roughness参数的二维函数,就可以预计算贴图

分形(递归&&坐标变换)

笑着哭i 提交于 2020-02-20 02:16:44
分形,具有以非整数维形式充填空间的形态特征。 通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。 现在,定义“盒子分形”如下: 一级盒子分形: X 二级盒子分形: X X X X X 如果用B(n - 1)代表第n-1级盒子分形,那么第n级盒子分形即为: B(n - 1) B(n - 1) B(n - 1) B(n - 1) B(n - 1) 你的任务是绘制一个n级的盒子分形。 输入格式 输入包含几个测试用例。 输入的每一行包含一个不大于7的正整数n,代表要输出的盒子分形的等级。 输入的最后一行为-1,代表输入结束。 输出格式 对于每个测试用例,使用“X”符号输出对应等级的盒子分形。 请注意’X’是一个大写字母。 每个测试用例后输出一个独立一行的短划线。 输入样例: 1 2 3 4 -1 输出样例 X - X X X X X - X X X X X X X X X X X X X X X X X X X X X X X X X - X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X

图形渲染管线简介

元气小坏坏 提交于 2020-02-14 13:58:34
The Graphics Rendering Pipeline 渲染管线,这章主要讲光栅化渲染管线。 毕业前实习时,也实现过一个简单的软光栅化渲染管线,再复习一下。 在计算机图形学领域,shading指基于表面相对灯光的角度、距灯光的距离、相对于相机的角度和材质的属性等来修改物体/表面/多边形的颜色,进而创造一个具有真实感效果的过程。 In computer graphics, shading refers to the process of altering the color of an object/surface/polygon in the 3D scene, based on things like (but not limited to) the surface's angle to lights, its distance from lights, its angle to the camera and material properties (e.g. bidirectional reflectance distribution function) to create a photorealistic effect. Shading is performed during the rendering process by a program called a

iOS开发-OpenGLES 入门踩坑

╄→гoц情女王★ 提交于 2020-02-13 09:12:56
OpenGL的变换 OpenGL ES 中有两套矩阵,都是4×4的GLfloat矩阵。一个叫 modelview matrix ,你大部分时间都会与之打交道。它是你用来对虚拟世界进行变换的矩阵。要对虚拟世界中的物体进行旋转,转移或尺寸变化,你都需要对此矩阵进行修改。 另一个矩阵用来创建根据设定的视口对世界坐标进行描述的二维表示。此矩阵称为 projection matrix 。在绝大部分时间内,你都不需要接触该矩阵。 从三维空间到二维平面,就如同用相机拍照一样,通常都要经历以下几个步骤 (括号内表示的是相应的图形学概念):   第一步,将相机置于三角架上,让它对准三维景物( 视点变换 ,Viewing Transformation)。   第二步,将三维物体放在适当的位置( 模型变换 ,Modeling Transformation)。   第三步,选择相机镜头并调焦,使三维物体投影在二维胶片上( 投影变换 ,Projection Transformation)。   第四步,决定二维像片的大小( 视口变换 ,Viewport Transformation)。   这样,一个三维空间里的物体就可以用相应的二维平面物体表示了,也就能在二维的电脑屏幕上正确显示了。 变换后的x坐标范围是[-1, 1],y坐标范围是[-1, 1],z坐标范围是[0, 1](OpenGL略有不同,z值范围是

数字图像处理——第二章(数字图像基础)

蹲街弑〆低调 提交于 2020-02-09 03:21:11
数字图像基础 一、人眼结构 二、电磁波谱和光 2.1 电磁波谱 2.2 光 三、图像的数学模型 四、图像的取样和量化 4.1 取样和量化的概念 4.2 数字图像表示 4.3 空间和灰度分辨率 4.4 图像内插 4.5 像素间的一些基本关系 4.5.1 相邻像素 4.5.2 邻接性、联通性、区域和边界 4.5.3 距离度量 五、数字图像处理中的数学工具介绍 5.1 阵列与矩阵操作 5.2 线性操作和非线性操作 5.3 算术操作 5.4 集合和逻辑操作 5.4.1 集合操作 5.4.2 逻辑操作 5.5 空间操作 5.5.1 单像素操作 5.5.2 邻域操作 5.5.3 几何空间变换和图像配准 5.6 向量和矩阵操作 5.7 图像变换 5.8 概率方法 一、人眼结构 眼睛由三层膜包裹:角膜与巩膜外壳、脉络膜和视网膜。 角膜 是一种硬而透明的组织,覆盖着眼睛的前表面,巩膜是一层包围眼球其余部分的不透明膜。 脉络膜 包含血管网,是眼睛的重要滋养源。 视网膜 是眼睛最里面的膜。眼睛适当聚焦时,来自眼睛外部物体的光在视网膜上成像。感受器通过感受视网膜表面分布的不连续光形成图案。 光感受器分为: 锥状体和杆状体 。 每只眼睛中的锥状体数量约为600~700万个, 对颜色高度敏感 。使用锥状体人可以充分 分辨图像细节 (每个锥状体都连接到自身的神经末梢)。锥状体视觉称为 白昼视觉或亮视觉 。