创建时,您可以直接指定图像供应设备()。该官员提供了一个非常简单的例子,即Off屏幕的示例(搜索离线):
该示例的图像供应设备是瓷砖服务,即,预制的瓷砖图,资源位于文件夹下方。
如果没有指定的地形供应(TerrainProvider),剖宫产也有默认策略:
也就是说,用作默认地形,也就是说,椭球被用作地形(因为没有)。
提示:实际上,这是一个子类,当要求文章的最后一部分时,将再次提及。
在本文中要解决的两个主要问题:
本文相对较长,不论该代码如何,都有超过8,000个单词,并且涉及更多数据类别,但是我认为可以完成对上述两个过程的一般解释,我可以沿着思考研究。
上层和下层的主要类(从一开始)大致是:
我简化了与上类的关系,他们没有让它们出现在图片中。
其管辖范围内的主要三维容器是它可以继续设置,也可以单独放置。
但是,有一个由三维对象创建的对象,该对象独立于构造函数,即地球的对象(准确,表面),这意味着它可以分开,并且使用不是问题一个普通的三维吸引力。实际上,在渲染单个框架的过程中,确实会判断它是否在存在之前进行更新和渲染。
它是由创作创建的,优先级仅次于。
由对象管理,伴随着单帧渲染,渲染和请求。对本文的最关注是地球表面上的图像+地形。这是一种稍作修改的数据结构。
这四树几乎是本文的所有内容。
但是,您不会忘记的其他功能。在这里,我将把它带到这里:
由于表面是表面,因此骨骼支持表面。
地球的形状是定义的,即数学表面 - 椭圆形,这是一个纯粹的数学定义。默认值是WGS84椭圆形。创建椭圆也很简单:
您甚至可以传递其他行星的参数(如果有),例如月球。
CGCS2000椭圆形与参数和WGS84椭球非常相似。通常,无需修改椭球的定义。
特殊专门维护着一棵具有极其复杂状态的瓷砖四fork树。每个帧,必须确定这四个fork树的对象:
混合多个异步同步的状态比单个三维对象的原始和实体要复杂得多。
这条瓷砖四树中可能有一两个树,或者可能有两棵树,具体取决于详细的瓷砖规则。
如果我们使用webakato投影来制作股四头肌递归划分,则只需要一棵树,因为webakato投影的坐标范围是一个正方形:
如果将纬度范围用作坐标值域将瓷砖与Quadriors划分,则需要两个左右树。
如何统一这两个状态?只需使用数组数来保存根磁图。它的私人属性就是这样的数组。该数组的长度仅为0、1和2,即0表示没有根瓷砖电影。1代表使用Webakato投影的四个叉子树的范围。
Gen Tiles甚至任何瓷砖都是类型。
每个人都有一个成员,该成员表示该抽象空间四个叉子的任何图块的数据。类型是;作为图块数据,必须有一个多层图像和单个地形数据组成。Tilefair和完整管理的多层图像数据,地形数据是通过完成完成的。
当然,地形供应商有很多类型,而且自然还有其他地形数据类别,例如,等。
它是一个抽象的瓷砖对象和特定的图块数据,也是数据瓷砖的中间人,负责一系列计算。
这些物体的创建散布在第2、3、4和5节中。
在框架中找到更新和渲染步骤并不难:
地球仪的这四个步骤实际上是通过同名方法完成的:
下一步是逐步分析这四个步骤。
更新和启动帧相对简单,主要是控制要可见和初始化的各种对象的状态。没有复杂的行为,因此他们在第三部分讲话。
从原型链上的功能开始,它是渲染单帧的第一个大操作。
拉开后备箱后,发现主要线索指向原型链上的私有方法。该瓷砖层容器是创建时实例化的容器:
它将直接传递到并进行更新时,将其更新在一起,即Prototype链上的私有更新功能直接执行:
图像层容器的私有更新功能做了什么?此功能只有超过30行,并且更简单地更新容器中的所有可见状态以及触发相关事件的方式。
因此,第一个过程“更新”实际上仅是:
①更新 - 填写图像层的状态
起始框架的一般过程发生在模块中:
解释上述过程。
从原型链上的方法开始,它将首先确定是否存在表面效应。在某些情况下,它将继续确定水表面表面图是否存在相关资源。确定水面不涉及太多复杂的示波器跳跃,但会更多地引入。这种方法将由通道来判断,以及通过渲染频道设定的一系列状态。
下一步是框架的焦点:
这三个子步骤按照模块中的两个函数顺序执行,以及上述过程中的原型链上的方法。
以下是文本分析。
简单地说,在框架开始之前:
②开始 - 请清洁房子
在此阶段做两件事:
瓷砖四fork树的名称实际上具有普通的类似功能。
在其原始链的方法中创建一个绘图指令(),然后将其添加到框架状态对象中。
创建创建指令并添加到帧状态对象的过程很长,并且作为场景中非常特殊且复杂的对象,它是合理的。从上对象派生的方法。
一般过程:
类似的过程也可以在Chrome开发人员工具中拦截(断点是在模块的函数中设置的):
它相对较长,两个模块中的功能更为重要:
相应的是刚刚提到的两件事:选择图块并创建指令。
这两个功能夹在原型链和方法之间。其中,该方法将创建的绘图指令添加到帧状态对象()中。
从原型链上的方法开始,我们直接进入渲染频道的分支(为需要调试和学习的人获取渠道):
首先是调用对象的方法。它将清除已在此对象上渲染的数组,并更新平面()的裁缝,然后更新重型瓷砖对象选择功能。
进入该功能后,便会复杂而长的瓷砖可见性,以及所选的计算是否开始。这些瓷砖就像农场的鱼一样,可以去除。
以下简要介绍了简要介绍此选择功能的步骤,这不涉及特定算法的实现。
该函数将立即清除瓷砖四-Fork Tree()以渲染瓷砖数组(每个元素是):
此步骤不难理解。它的行为反映了场景框架渲染的框架,该框架将完全清空上一个帧。
在最后一步之后,将存在四四形fork树上的零阶段瓷砖。如果没有存在,则必须创建它。上面的1.3部分中提到的零级图块,这是一个数组对象。
如果没有存在,则无法创建零级图块。
静态方法在瓷砖四-Fork Tree()上使用瓷砖分割模式来创建零级瓷砖。实际上,判断它是纬度和经度的正方形区域或矩形区域用简单的两个层次循环创建。
如果可以进一步执行最后一步,则零级图数数组必须具有零级图块。在功能中循环的最后使用来遍历它们,并且将执行深度优先级。
在此周期之前,有一些简单的相机操作,状态和数据操作相对简单,因此我不会开发它。
确定是否可以在周期中渲染瓷砖对象,并且不能下载四个fork树瓷砖尚未下载,并将其放入第五部分的最后框架和高优先级加载的其他第5部分和其他第5部分大批。
在周期的这一步骤中,可以向下扩展两层功能。第一个是函数,第二个是函数:
原型链上的方法计算了瓷砖()的可见性,并立即进入递归访问瓷砖的功能,对于不可见的瓷砖。
该函数的计算量相对较大,具有近300行的数学计算。这是剖宫产的核心算法,用于删除瓷砖甚至瓷砖调度。
如果您将来对算法感兴趣,则可以开始详细的讲座,但是本文不是算法,并且实现了这些算法。
由于它是四倍树的结构,因此需要仔细设计瓷砖四个瓷砖的判断。在此课程中,可以细分:
在功能中,在此级别和第一个层面的瓷砖各个状态的判断(屏幕空间误差,瓷砖数据加载,父亲-son替换优化等)。并再次启动加载水平高优先级瓷砖数组的加载行为:
该功能相对简单,细节省略;然后,该功能将重点放在下一节上。教学(也称为图指令)。
有些人可能很好奇数据尚未通过HTTP请求下载。如何生成?就是这种情况。当然,当WebGL可视化运行时,Cesiumjs当然是第一个任务。因此,在4.1部分中,将有大量的“是否已加载瓷砖”,并且可以使用图纸指令来创建瓷砖。数据必须准备并不准备。请重新下载,下载并创建瓷砖和其他操作。
瓷砖复杂之后,类启动drawcommand(drawCommand)以生成数组中的当前帧。也就是说,该功能的调用:
此函数相对较短。它遍历图块四-Fork树对象上的数组。这个数组是什么?上一节的功能③最终将添加所选图块以将所选图块添加到此数组中。
您通过此数组做什么?在创建之前进行了最后的判断,并在原型链上调用方法。
此方法将计算传递成员(类型)成员(类型)的数量(类型)。
然后,使用此“准备好的瓷砖编号”作为重新启动顶部瓷砖数组的关键:
添加此二次列表:
此方法还必须判断该对象是否准备就绪。如果您准备就绪,那么标记是正确的,也就是说,当前的帧已填充了数据。否则,它将被标记为真,也就是说,当前帧已被加载但未生成。
在这一点上,瓷砖的判断终于完成了,战场的时间就在这里。
最终对象的方法将真正完成指令的创建。
有三种行为:
关键是最后的行为。创建图形指令是实际终点,即功能的调用。
它整合了所有行为和数据对象的效果。主要责任是将四折的各种数据转换为责任:
此功能很长,接近700行,但是此模块文件()中只有一个来创建指令,但是:
其中,该模块中的功能是在简单的判断后将指令添加到帧状态对象。
创建图形说明并将其移交给框架状态对象后,地球的整个过程已经结束。但是您必须有一个问题:
数据从何而来?
必须提到的是,第四个过程是渲染过程后的最终帧过程。它负责完成网络数据请求和要加载的图块的分析(下载和解析)。
查看下一部分:
发生了很多事情,包括数据下载,分解成纹理和其他对象,甚至是瓷砖的重大投影。
此过程得到了优化,并且不会在相机飞行过程中进行以确保动画性能。
从抽象的角度来看,必须有一个四fork树对象,即每个节点,即树结构上的元素。
它对数据管理概不负责。它们的作用是安排数据结构,例如根据四个fork树的索引计算其空间范围,可见性,渲染状态等改进。
有四个块最大瓷砖的镶嵌物体的成员属性。类型是这是瓷砖本身的数据。对象存储图像服务在四个-fork树的位置以及Terrain Data.Object中有一个成员,这是一种数组,,每个都代表图块上图像层的图像图像。
因为它连接到瓷砖的脉冲,所以它属于数据模型的第一层,并且服务器上对真实图像服务的真实请求是所有的。因此,这是下载数据中间的某种形式创建的单个图像图块,这是通过使用图块图像生成的对象。
地形数据的形状,即地形数据,具有各种地形数据可供选择。这里没有详细扩展。常用的高图(),stk()等,具体取决于使用的地形提供商(例如使用地形提供商(例如Useto。如果您有兴趣,您可以学习相关的博客他妈的。
瓷砖的外观负责图像部分,瓷砖的形状负责地形服务。在本节开头的代码的简单过程中,该函数的功能首先执行函数。该功能实际上是该四个fork树对象的三个图块上的负载队列,并按顺序加载图块:
该模块中的功能将处理单个负载队列。一一首先通过此功能处理高优先级数组,然后是中等优先级和低优先级。使用此参数(类型)加载每个遍历的方法:
该遍历逐层通过一层传递,在静态方法的静态方法之后,模块中的函数由地形数据处理(此功能在处理图像数据之前首先处理地形数据)。
您可以在此功能中看到几个分支。他们判断该层上数据的状态,即其成员的状态(类型)以满足哪种状态以及哪种处理:
从这6个州判断分支机构,您可以看到剖腹产如何设计瓷砖地形数据的优先级:
执行功能后,该过程的过程将返回到静态函数,并继续下载图像图块。
上一节(5.2)结束了地形数据,并立即开始了图像的操作。
此过程由对象的方法执行,一般过程如下:
首先,创建创建,并将发送缓存池。此步骤是指原始链上的方法。该方法相对较长。您可以直接找到该方法的末尾。没有它。
确定篮子后,调用对象的方法,然后调用对象的方法根据状态状态选择不同的处理方法:
实际上,有三个州:
我们的文章不会扩展纹理对象的引入和重新投影的引入。重点是视频图块的下载:调用数据请求方法,然后是调用请求图块的方法。
从外部,该容器对象从外部暴露于开发人员,以添加一层。
然后,下载和生成瓷砖的图像部分。
第四个过程,即完成过程结束后,渲染地球对象的整个任务已经完成。
在此过程中,它主要准备下一帧的地形和视频图块数据。在此期间,网络工程技术将用于地形数据处理,并且将启动视频瓷砖的网络请求。
我个人认为,这一步骤对于阐明各种对象之间的关系非常重要。CONSISSIDS绘制对象关系图,该分支上的类是非常杂项。
数据最终将记录在现场(类型),并等待下一帧渲染(即返回本文第3节)。
我希望地球的渲染会更加复杂,但是我没想到这会比这比更复杂,因此花费了很长时间来研究源代码,这是花费更多时间的两倍以上。
老实说,我写了这篇文章非常粗糙,甚至可能在之前和之后都不一致,并且要求读者了解。
作为一个更特殊的三维对象,与完成渲染循环的安装和生成的事件机制不同,最重要的是它维护的瓷砖四fork树对象,负责渲染(直接创建等),网络请求在线请求,网络请求分析瓷砖数据,并且可以看到,渲染和多效应(即SO -so -called Tile Scheduling),这要比比较复杂得多。
我以为一个四fork树对象,每个节点对象是由渲染时摄像头确定的,它不可见。是数据吗?即使这就是全部,我也没想到它真的很复杂。
Cesiumjs在可见的瓷砖,父亲替换的计算以及表面效应的叠加方面做了很多努力,因为3D瓷砖不如2D瓷砖那么简单。基于各种物体的状态设计。,随着每个请求框架的通过,它确实实现了“状态在哪个状态的状态”。
他们俩都有自己的弟弟。
后来,我考虑了这两个角色,很容易理解:项目经理和技术经理。
在大多数情况下,空间算法调度是“调度角色”,并且负责与各种数据生成器进行通信。它具有创建数据对象的能力。数据生成任务。
这两个好朋友与一个左右的一个好朋友配对,承担着地球的大部分职责,更常见的是,这是通往外界的国家窗口,即“大老板”。
除了瓷砖的脉冲外,还有用于效果的对象,例如海水动态方法的质地,地球采摘,深度问题,截面规则,切割和有限的显示,大气的效果,特定的材料等。它已列出,但是这些将创建功能功能并将其赋予框架状态的绘图指令,并且它不比此股四头肌那么复杂,因此建议您不要付出任何努力的读者研究 - 深度研究。
关于地形瓷砖,剖腹产使用高价值瓷砖和②stk瓷砖来表达瓷砖的形状。关于图像图块,剖腹产使用多个图像层的瓷砖来管理多个图像层。我没有引入这两个数据的差异和世代。Fuckgiser的博客已详细介绍。近年来,数据格式一直稳定,并且没有太大变化。如果您将来有机会,可以编写它。
我没有加深视频瓷砖的重新投影。我可能会考虑将来分别编写一个系列,内容涉及图像瓷砖的坐标校正。
就颜色设备而言,整个源代码中的颜色设备代码的最大颜色是与这对的对,能量有限,并继续讨论(实际上,Cesiumjs的颜色是整个集合,最好找到时间学习效果)。
原始:https://juejin.cn/post/709548957228439646