,可以通过以下方式实现:
推荐的腾讯云相关产品和产品介绍链接地址:
接着,顶点着色器首先对图元的每个顶点设置模型视图变换及投影变换(即右乘MVP矩阵),然后将变换后的顶点按照摄像机视椎体定义(即透视投影,或正投影)进行裁剪,将不在视野内的顶点去掉并剔除某些三角面片。...最后,帧缓冲区内容被交换到屏幕进行显示。 下面会对各个阶段每个知识点进行详细的分析理解。...裁剪,处于视椎体以外的图元将被丢弃,若该图元与视椎体相交则会发生裁剪产生新图元,如下图: ? ? 注意一点,透视裁剪是比较影响性能的过程,因为每个图元都需要和6个裁剪面进行相交计算并产生新图元。...所以一般在x轴,y轴超出屏幕(由glViewPort定义)的部分,这些顶点在视口变换的时候被更高效的直接丢弃,无须产生新图元。...经过视椎体裁剪后的顶点坐标经过透视分离(指由硬件做透视除法),得到范围是[0,1]的归一化的设备坐标,最后映射到屏幕或者视口上。
就像一个在同一时间内,不同阶段不同的汽车一起制造的装配线,传统的图形硬件流水线以流水的方式处理大量的顶点、几何图元和片段。 图2显示了当今图形处理器所使用的图形硬件流水线。...视变换: 从世界空间位置到眼空间位置的变换时视变换。典型的视变换结合了一个平移把眼睛在世界空间的位置移到眼空间的原点,然后适当地旋转眼睛。通过这样做,视变换定义了视点的位置和方向。...另一个被称为深度范围变换的变换,缩放顶点的z值到在深度缓冲中使用的深度缓存的范围内。...当光栅化后,一个图元拥有的顶点数目和产生的片段之间没有任何关系。例如,一个由三个顶点组成的三角形占据整个屏幕,因此需要生成上百万的片段。 片段和像素之间的区别变得非常重要。...---- 三.插值、贴图和着色 当一个图元被光栅化为一堆零个或多个片段的时候,插值、贴图和着色阶段就在片段属性需要的时候插值,执行一系列的贴图和数学操作,然后为每个片段确定一个最终的颜色。
图元装配(Primitive Assembly),顾名思义就是组装图元的意思,也就是说它会把顶点组装成图元,同时它也会对它组装的图元进行一个简单的处理以使得在后续流程中只处理可以在屏幕中显示的图元。...在组装好图元之后,它会判断该图元是否处于屏幕的可显示的范围内,如果图元完全不在屏幕的可显示范围内,那么它就会丢弃该图元,如果图元有一部分在可显示的范围内,则裁切图元,丢弃不在屏幕显示范围内的部分。...除此之外,图元装配也会去判断图元的朝向是面向正面还是背面,如果图元是面向背面的,那么该图元也会被丢弃。...而所有权的决定方在窗口系统(Windows System),比如说:如果一个OpenGL ES帧缓冲窗口被其它窗口遮住了,那么窗口系统会决定这个像素不属于当前OpenGL ES的context,也就是说这个像素不应该在当前窗口中显示...2) Scissor test:裁剪测试,该测试用于判断片元的坐标(x,y)是否处于当前OpenGL ES确定的裁剪矩形内,如果片元坐标不在这个矩形里面,那么该片元会被丢弃。
OpenGLES 2.0时,你必须在GLSurfaceView构造器中调用另外一个函数,它说明了你将要使用2.0版的API: setEGLContextClientVersion(2); 另一个可以添加的你的...onDrawFrame()- 每次View被重绘时被调用。 onSurfaceChanged()- 如果view的几和形状发生变化了就调用,例如当竖屏变为横屏时。...对于每个图元,必须确定它是否位于视椎体内(3维空间显示在屏幕上的可见区域),如果图元部分在视椎体中,需要进行裁剪,如果图元全部在视椎体外,则直接丢弃图元。裁剪之后,顶点位置转换成了屏幕坐标。...背面剔除操作也会执行,它根据图元是正面还是背面,如果是背面则丢弃该图元。经过裁剪和背面剔除操作后,就进入渲染流水线的下一个阶段:光栅化。 4 rasterization(光栅化) ?...Scissor test:裁剪测试决定位置为(Xw, Yw)的片元是否位于裁剪矩形内,如果不在,则被丢弃。
视变换: 从世界空间位置到眼空间位置的变换时视变换。典型的视变换结合了一个平移把眼睛在世界空间的位置移到眼空间的原点,然后适当地旋转眼睛。通过这样做,视变换定义了视点的位置和方向。...另一个被称为深度范围变换的变换,缩放顶点的z值到在深度缓冲中使用的深度缓存的范围内。...当光栅化后,一个图元拥有的顶点数目和产生的片段之间没有任何关系。例如,一个由三个顶点组成的三角形占据整个屏幕,因此需要生成上百万的片段。 片段和像素之间的区别变得非常重要。...图7显示了一个可编程图形处理器的流水线中的顶点处理器和片元(像素)处理器。 图7比图2展示了更多的细节,更重要的是它显示了顶点和片段处理被分离成可编程单元。...该阶段之后,像素的颜色值被写入帧缓存中。
例如当我们玩CS游戏时,屏幕显示的内容随着视点的变化而变化,这是因为GPU将物体的坐标从世界坐标系变换到了观察坐标系。...Directx中通过一个称为投影矩阵来将视域体中的几何体投影到投影窗口中。 视口坐标系(屏幕坐标系) 从视点坐标系到视口坐标系的转换是通过视口变换操作来进行的。...假定我们为每个像素的alpha分量保留了8位,则该alpha分量的合法区间是[0,255],其中,[0,255]对应透明度[0%,100%]。当像素的alpha值为0时,该像素是完全透明的。...3.4 深度测试 当两个物体有前后位置关系时,位于前面的物体会将后面的物体部分或全部遮挡。这时为了优化考虑,GPU不应该绘制被遮挡的片段,这种行为称为遮挡剔除。...所以,当所绘制的图形的分辨率为640*480时,深度缓存中将有640*480个深度项。
在该阶段的末端,几何体数据(顶点坐标。...在游戏中,都会提供漫游的功能,屏幕显示的内容随着视点的变化而变化。这是因为 GPU 将物体顶点坐标从 world space 转换到了 eye space。...很多人在理解该步骤时存在一个混乱,即“不清楚裁减与投影的关系和两者 发生的先后顺序”,不少人觉得是“先裁减再投影”,不过事实并非如此。...确定只有当图元完全或部分的存在于视锥内部时,才需要将其光栅化。...当一个图元完全位于视体(此时视体以及变换 为 CVV )内部时,它可以直接进入下一个阶段;完全在视体外部的图元,将被剔除;对于部分位于视体内的图元进行图元进行裁剪处理。
当顶点经过顶点阶段处理后,渲染管线会对图元光栅化处理,以此来确定渲染目标中的哪些像素位于图元的边界内(即图元可以转化成的像素)。片元阶段是要确定渲染目标的像素值。...归一化设备坐标与视口大小无关。 归一化设备坐标使用左手坐标系来映射视口中的位置。图元被裁剪到这个坐标系中的一个裁剪框上,然后被光栅化。...但是,当只需要向顶点函数传递少量数据时,可以将数据直接复制到命令缓冲区中。...该示例将两个参数的数据复制到命令缓冲区中,顶点数据是从定义的数组复制而来的,视口数据是从设置视口的同一变量中复制的,片元函数仅使用从光栅化器接收的数据,因此没有传递参数。...当三角形被渲染时,vertex 函数被调用,参数 vertexID 的值分别为 0、1 和 2。 // Draw the triangle.
θx和tx不包括在内,因为当车辆在平地上行驶时,侧倾角通常很小,并且当车辆和搜索车道相互平行时,车辆的纵向位移不可用,此外,为了折衷优化中缺少的侧倾角度,车辆旋转使用大范围的通过暴力搜索进行微调。...最后,为了使规划模块获得更平滑的姿态,提高定位系统的鲁棒性,采用了带有滑动窗口的姿态图,优化窗口中包含跟踪良好的帧数据,如果滑动窗口的大小超过阈值,历史记录中的一帧将根据车辆状态从滑动窗口中剔除。...在姿态优化中,因子图由两部分组成,第一部分是每帧的先验姿态因子,约束其视觉对齐的先验分布,另一个是车轮里程计系数,它建立相邻帧之间的连接,以确保平滑的姿势输出,位姿图优化的总残差如等式所示: E.优化...F.跟踪丢失恢复系统 跟踪系统可能在以下三种情况下丢失: (1)车辆不在HD地图的范围内; (2) 姿势优化失败的总数超过阈值; (3) 严重遮挡的连续帧数超过阈值(例如,在语义地图元素完全不可见的交通堵塞情况下会发生这种情况...跟踪置信度计算模块将根据上述统计指标确定系统状态,当定位系统处于丢失状态时,跟踪丢失恢复模式被激活,丢失帧的姿势替换为从车轮里程计推断的备用姿势,即优化前的姿势,给定下一帧,为了激活跟踪阶段,系统再次进入初始化状态
文章目录[隐藏] 更新日志 前言 目录 OpenGL 状态机 OpenGL渲染管线 顶点数据 顶点着色器 早期图元装配 Tessellation 几何着色器 顶点后处理 变换反馈 裁剪 透视除法 视口变换...这一步骤中,我们可以保存下经过之前处理的图元数据。这样,在下一次渲染时我们就可以使用这些数据了。 裁剪 裁剪的主要目的就是把屏幕不会显示的内容剔除。...视口变换 视口变换中,坐标将会被转化为真实屏幕上显示的坐标——也就是屏幕空间坐标(screen-space coordinates)。...由于早期图元装配已经做了装配图元的工作(没错,装配图元不是这个时候进行的!),因此此时将主要进行面剔除。 面剔除 经过顶点后处理后,我们已经可以得知图元在屏幕上显示的真实坐标了。...如果失败(比如发现片段被另一个片段遮挡)将会抛弃这个片段。 之后将会进行混合、抖动、逻辑操作、写掩码等等复杂的处理。这些处理同样也会在之后的文章中进行进一步的阐述。
一、移动端轮播图滑动 1、先获取手指在轮播图元素上的滑动方向(左右) (1)手指触摸开始时记录手指所在的坐标X (2)获取界面上的轮播图容器 var $carousels=$('.carousel')...; (3)注册滑动事件 (4)变量重复赋值 (5)结束触摸的一瞬间记录最后手指所在坐标X (6)比较开始和结束的坐标大小 (7)控制精度 获取每次手指滑动的距离,当距离大于一定值时,就认为有方向变化...2、根据获得到的方向选择上一张或下一张 必须用$(this),若使用$carousels,当页面中有多个轮播图时,会一起动 $(this).carousel(startX>endX?'...next':'prev'); javascript代码 1 //移动端轮播图滑动 2 3 //1、先获取手指在轮播图元素上的滑动方向(左右) 4 //手指触摸开始时记录手指所在的坐标...clientX:触摸目标在视口中的x坐标。 clientY:触摸目标在视口中的y坐标。 identifier:标识触摸的唯一ID。 pageX:触摸目标在页面中的x坐标。
API之位图、图标和光栅运算函数 BitBlt 将一幅位图从一个设备场景复制到另一个 CopyIcon 制作指定图标或鼠标指针的一个副本。...Chord 画一个弦 CloseEnhMetaFile 关闭指定的增强型图元文件设备场景,并将新建的图元文件返回一个句柄 CloseFigure 描绘到一个路径时,关闭当前打开的图形...GetMetaFileBitsEx 将指定的图元文件复制到一个内存缓冲区 GetMiterLimit 取得设备场景的斜率限制(Miter)设置 GetNearestColor 根据设备的显示能力...该区域当前无效,需要刷新 GetViewportExtEx 获取设备场景视口(viewport)范围 GetViewportOrgEx 获取设备场景视口起点 GetWindowDC 获取整个窗口...GetWindow 获得一个窗口的句柄,该窗口与某源窗口有特定的关系 GetWindowContextHelpId 取得与窗口关联在一起的帮助场景ID GetWindowLong 从指定窗口的结构中取得信息
下图所表示的经过透视投影处理后的z值情况,可以看到由于视体标准化的原因n+f是真正意义上的0点,z值在n+f的位置发生的翻转,这个翻转导致了图的下半部分的三角形c点经过透视投影后出现在了另一个方向,这将会导致光栅化的时候绘制出错误的片元...视体裁剪除了防止撕裂外还有一个显而易见的好处就是减少了后面进行投影变换时需要处理的顶点数量,而且减少掉的内容本来就在视体之外所以不会影响到最终的画面 要进行视体裁剪有两种可选的方法,一种是在世界坐标系中指定需要的裁剪面...而且这样的着色面对光照着色的计算时,由于光照方向只在顶点处才有采样,因此一方面处于图元中间的光源照射得到的光照常常比实际的暗,而且曲面区域上的高光效果会呈现很明显的多边形特征。如下图: ?...因而如果我们想要提高光栅化的效率我们可以在光栅化之前对图元进行剔除,通过删掉一些不会影响最终效果的图元来加速渲染 图元剔除一般有下面三个大类: 视体剔除 遮挡剔除 背面剔除 其中遮挡剔除是最为复杂的部分这本书没有介绍...背面剔除的直观效果是当我们处于封闭模型中时,我们很可能看不到这个模型,因为模型正对着我们的图元都背对着摄像机,这在我们玩游戏时偶尔可以观察到。
作为一种优化,此函数利用时间相干性,并且如果对于该帧的命令仍然合理,则将重用最后计算的视锥。 ?...与平视显示器(HUD)相似,覆盖通道的命令最后执行。 ? Cesium当前的渲染管线。 排序和批处理 在每个视锥中,保证按图元返回命令的顺序执行命令。...立方体贴图通道 阴影的另一个扩展是渲染立方体贴图的能力,即形成一个盒子的六个2D纹理描述了盒子中间某个点周围的环境。立方体贴图可用于反射,折射和基于图像的照明。...计算通道 Cesium会使用老式的GPGPU来进行GPU加速的图像重投影,在该渲染过程中,它将渲染一个与屏幕视口对齐的四边形,以将重投影推向着色器。...这可以通过在帧开始时的计算过程中使用后处理框架来完成。参见#751。 ? 潜在的未来Cesium渲染管线(新阶段以粗体显示)。 致谢 我和Dan Bagnell编写了大多数Cesium渲染器。
2.草图编辑 绘制图元的命令只能绘制一些简单的基本图形,要想获得理想的复杂截面图形,则需借助草图编辑命令对基本图元对象进行位置、形状的调整。...2.2 缩放和旋转 “旋转”就是将所绘制的图形以某点为旋转中心旋转一个角度;“缩放”是对所选取的图元进行比例缩放。...重做 在绘制草图时,需要恢复上一步撤销的操作时,可以单击工具栏按钮或者直接按快捷键“Ctrl+Y”,或者依次点击主菜单“编辑”|“重做XX”选项,其中的XX为上一步撤销操作的具体名称。...草绘器确保在截面创建的任何阶段都已充分约束与标注该截面。当草绘某个截面时,系统会自动标注几何,这些尺寸被称为弱尺寸,因为系统在创建或删除它们的时候并不予以警告。弱尺寸显示为灰色。...当用户添加自己的尺寸来创建所需的标注形式时,这种用户尺寸被认为是强尺寸。添加强尺寸时系统会自动删除不必要的弱尺寸和约束。在绘图窗口中,系统会高亮显示用户定义的尺寸。
一定要牢记,显示屏是二维的,GPU 所需要做的是将三维的数据,绘制到二维屏幕上,并到达“跃然纸面”的效果。...很多人在理解该步骤时存在一个混乱,即“不清楚裁减与投影的关系和两者发生的先后顺序”,不少人觉得是“先裁减再投影”,不过事实并非如此。...确定只有当图元完全或部分的存在于视锥内部时,才需要将其光栅化。...当一个图元完全位于视体(此时视体已经变换为 CVV)内部时,它可以直接进入下一个阶段;完全在视体外部的图元,将被剔除;对于部分位于视体内的图元进行裁减处理。...使用高级语言实现时,如果一个场景实体完全不在视锥中,则该实体的网格数据不必传入 GPU,如果一个场景实体部分或完全在视锥中,则该实体网格数据传入 GPU 中。
读者现在可以跳过这一部分内容,但在读完这本书的每一章时,都应该重温一下图1-2。 ? ? 图1-2显示了Henry Ford在福特汽车公司采用的装配线方法,它也是OpenGL处理数据的方法。...1 显示列表Display Lists 任何数据,不管它所描述的是几何图形还是像素,都可以保存在显示列表(display list)中,供当前或以后使用。...当一个显示列表被执行时,被保存的数据就从显示列表中取出,就像在立即模式下直接由应用程序所发送的那样。 2 求值器Evaluators 所有的几何图元最终都要通过顶点来描述。...4 图元装配Primitive Assembly 图元装配的一个主要内容就是剪裁,它的任务是消除位于半空间(half-space)之外的 那部分几何图元,而这个半空间是由一个平面所定义的。...接下来所进行的是视口(viewport)和深度(z 坐标)操作。如果启用了剔除功能(culling)并且该图元是个多边形,那么它就有可能被剔除测试所拒绝。
使用图元重启,可以 通过在索引列表中插入一个特殊索引来重启一个用于索引绘图调用(glDraw***)的图元,这个 特殊索引 就是该索引类型的 最大可能索引。...当无法用 图元重启 将网格连接在一起时,可以添加造成退化三角形的元素索引,代价时使用更多的索引。 退化三角形 是指 两个顶点或者更多顶点相同 的三角形。...图元类型和顶点确定将被渲染的单独图元,对于每个单独图元及对应的顶点将执行下图的操作。 下图展示了 图元装配阶段。 坐标系统 下图展示了顶点通过顶点着色器和图元装配阶段时的坐标系统。...裁剪点精灵——如果点位置在近或者远裁剪平面之外,或者点精灵的正方形在裁剪体之外,裁剪阶段则抛弃点精灵,否则将通过不做变化通过该阶段,点精灵将在其从裁剪体内部移动外部时裁剪,反之亦然。...视口变换 视口是一个二维矩形窗口区域,是OpenGL ES 渲染操作最终显示的地方。
领取专属 10元无门槛券
手把手带您无忧上云