当前位置: 首页 > news >正文

商城网站怎么做推广方案seo优化教学视频

商城网站怎么做推广方案,seo优化教学视频,百度网站优化排名,可以自己做漫画的网站上篇文章中,我们介绍了使用viewer.entities.add添加entity之后的信号传递以及最后entity对象被传递到GeometryVisualizer; 这篇文章,我们则介绍如何在逐帧渲染的过程中根据GeometryVisualizer中的entity对象创建相应的primitive 这是下文中…

上篇文章中,我们介绍了使用viewer.entities.add添加entity之后的信号传递以及最后entity对象被传递到GeometryVisualizer

这篇文章,我们则介绍如何在逐帧渲染的过程中根据GeometryVisualizer中的entity对象创建相应的primitive

这是下文中涉及到的类的类图,从中可以清晰的了解各个对象之间的关系,下面我们结合代码来仔细讲解。

在这里插入图片描述

循环的一帧

我们先看下viewer初始化的时候做了什么,在何处定义了每一帧的循环,并持续的进行渲染,结合时序图(见第三节)和源码,可以将其分为两个部分

Viewer初始化

  1. viewer初始化并创建clock
function Viewer(container, options){let clock;let clockViewModel;let destroyClockViewModel = false;if (defined(options.clockViewModel)) {clockViewModel = options.clockViewModel;clock = clockViewModel.clock;} else {clock = new Clock();clockViewModel = new ClockViewModel(clock);destroyClockViewModel = true;}
}
  1. clock作为参数之一创建cesiumWidget
// 省略其他参数
const cesiumWidget = new CesiumWidget(cesiumWidgetContainer, {clock: clock});
  1. 添加监听事件,建立事件响应,其效果我们在后面再具体描述
eventHelper.add(clock.onTick, Viewer.prototype._onTick, this);

cesiumWidget初始化

  1. 在构造函数中设置渲染循环策略this.useDefaultRenderLoop
this._useDefaultRenderLoop = undefined;
this.useDefaultRenderLoop = defaultValue(options.useDefaultRenderLoop,true
);

结合useDefaultRenderLoopset函数可知其实是调用了startRenderLoop函数

useDefaultRenderLoop: {get: function () {return this._useDefaultRenderLoop;},set: function (value) {if (this._useDefaultRenderLoop !== value) {this._useDefaultRenderLoop = value;if (value && !this._renderLoopRunning) {startRenderLoop(this);}}},
}
  1. startRenderLoop中定义了render函数并每一帧进行调用
function startRenderLoop(widget) {widget._renderLoopRunning = true;let lastFrameTime = 0;function render(frameTime) {// 此处省略细节widget.render();requestAnimationFrame(render);}requestAnimationFrame(render);
}
  1. render函数中起实际作用的是函数widget.render,其内部通过调用this._clock.tick()发出信号,结合上一节viewer初始化中提到的事件监听的建立可以知道,进行响应的是Viewer.prototype._onTick函数
CesiumWidget.prototype.render = function () {if (this._canRender) {this._scene.initializeFrame();const currentTime = this._clock.tick();this._scene.render(currentTime);} else {this._clock.tick();}
};Clock.prototype.tick = function () {this.onTick.raiseEvent(this);return currentTime;
};
  1. Viewer.prototype._onTick函数中,会通过调用函数this._dataSourceDisplay.update(time)进行实际的primitive对象的创建
Viewer.prototype._onTick = function (clock) {const isUpdated = this._dataSourceDisplay.update(time);
};

时序图

  • 这里我们附上整个过程的时序图,帮助大家更好的了解整个过程
    [图片]

生成Primitive

通过上面的描述,我们知道了cesium的每一帧是如何更新的,以及其通过调用this._dataSourceDisplay.update(time)进行primitive的创建,下面我们就探究下具体的创建过程

  1. update中,获取了this._defaultDataSource_visualizers属性,通过上一篇文章我们知道,其是一个包含了GeometryVisualizer等多个Visualizer的列表,其中GeometryVisualizer是后续创建polygon对应primitive的类

    DataSourceDisplay.prototype.update = function (time) {visualizers = this._defaultDataSource._visualizers;vLength = visualizers.length;for (x = 0; x < vLength; x++) {result = visualizers[x].update(time) && result;}return result;
    };
    

    [图片]

  2. GeometryVisualizerupdate函数中主要做了如下几件事:

    • 获取被添加对象,在上一篇文章中我们知道,通过_onCollectionChanged函数,将添加的entity添加到了this._addedObjects属性中

      const addedObjects = this._addedObjects;
      addedObjects.set(id, entity);
      
    • 遍历每一个被添加的对象

      • 创建UpdaterSet,其内部的updaters包含了PolygonGeometryUpdater在内的10个Updater
        [图片]

      • 通过updater尝试创建instance(后面详细介绍)

    • 移除已经被添加的对象

    • batch中创建primitive(后面详细介绍)

代码节选如下:

GeometryVisualizer.prototype.update = function (time) {// 获取被添加对象const addedObjects = this._addedObjects;const added = addedObjects.values;// 遍历每一个被添加的对象for (i = added.length - 1; i > -1; i--) {entity = added[i];id = entity.id;// 创建UpdaterSetupdaterSet = new GeometryUpdaterSet(entity, this._scene);this._updaterSets.set(id, updaterSet);// 通过每一个updater尝试创建instance 并添加到batch中updaterSet.forEach(function (updater) {that._insertUpdaterIntoBatch(time, updater);});}// 移除已经被添加的对象addedObjects.removeAll();// 在batch中创建primitivelet isUpdated = true;const batches = this._batches;const length = batches.length;for (i = 0; i < length; i++) {isUpdated = batches[i].update(time) && isUpdated;}return isUpdated;
};

生成instance

  1. 获取polygonOutline对应的instance

    • 在函数GeometryVisualizer.prototype._insertUpdaterIntoBatch中将updater传递到StaticOutlineGeometryBatch.prototype.add函数中
    this._outlineBatches[shadows].add(time, updater);
    

    在这里插入图片描述

    • StaticOutlineGeometryBatch.prototype.add先创建polygonOutline对应的instance
    const instance = updater.createOutlineGeometryInstance(time);
    
    • StaticOutlineGeometryBatch.prototype.add中,调用batch.add函数,传入instance,并写入字典this.geometry
    this.geometry.set(id, instance);
    

    在这里插入图片描述

  2. 获取polygon对应的instance

    • 同样在函数GeometryVisualizer.prototype._insertUpdaterIntoBatch中,将updater传递到StaticGeometryColorBatch.prototype.add函数中

      this._closedColorBatches[shadows].add(time, updater);
      

      [图片]

    • StaticGeometryColorBatch.prototype.add先创建polygon对应的instance

    const instance = updater.createFillGeometryInstance(time);
    
    • StaticGeometryColorBatch.prototype.add中,调用batch.add函数,传入instance,并写入字典this.geometry
    this.geometry.set(id, instance);
    

生成primitive

在循环中遍历所有的GeometryBatch对象,并update
[图片]

  1. 生成polygonOutline对应的primitive

    • 通过StaticOutlineGeometryBatch.prototype.update遍历solidBatchesLength属性,并update
      在这里插入图片描述
    • batch.update中生成primitive
      在这里插入图片描述
  2. 生成polygon对应的primitive

    • 通过StaticGeometryColorBatch.prototype.update调用updateItems函数,在其内部,遍历batchupdate
      [图片]

    • batch.update中生成primitive
      [图片]

时序图

  • 在这里我们附上整个过程的时序图,可以帮助大家更好的了解整个过程
    在这里插入图片描述

后续

  • 后面我们会进一步探索创建得到的primitive如何被渲染,并对比其和我们直接添加的primitive在组织结构上有什么区别

文章转载自:
http://phytane.mdwb.cn
http://atrociously.mdwb.cn
http://fussock.mdwb.cn
http://evaporate.mdwb.cn
http://phare.mdwb.cn
http://woo.mdwb.cn
http://footscraper.mdwb.cn
http://manchineel.mdwb.cn
http://legalistic.mdwb.cn
http://pasturable.mdwb.cn
http://hygrostat.mdwb.cn
http://zoon.mdwb.cn
http://sinkful.mdwb.cn
http://xcviii.mdwb.cn
http://intrant.mdwb.cn
http://esthesis.mdwb.cn
http://acaleph.mdwb.cn
http://imari.mdwb.cn
http://frederica.mdwb.cn
http://notch.mdwb.cn
http://turgescent.mdwb.cn
http://syrup.mdwb.cn
http://mineable.mdwb.cn
http://selfsame.mdwb.cn
http://butanol.mdwb.cn
http://barege.mdwb.cn
http://malmaison.mdwb.cn
http://diaplasis.mdwb.cn
http://campy.mdwb.cn
http://deoxycorticosterone.mdwb.cn
http://homesite.mdwb.cn
http://ericoid.mdwb.cn
http://biometeorology.mdwb.cn
http://catfooted.mdwb.cn
http://anteflexion.mdwb.cn
http://phagocytose.mdwb.cn
http://admittable.mdwb.cn
http://roentgenoscope.mdwb.cn
http://recital.mdwb.cn
http://asla.mdwb.cn
http://wrapper.mdwb.cn
http://sylleptic.mdwb.cn
http://vertigo.mdwb.cn
http://nonsectarian.mdwb.cn
http://guilin.mdwb.cn
http://syndrome.mdwb.cn
http://anacidity.mdwb.cn
http://trompe.mdwb.cn
http://excavate.mdwb.cn
http://unrelaxing.mdwb.cn
http://purchaseless.mdwb.cn
http://mensurability.mdwb.cn
http://rabbinist.mdwb.cn
http://nook.mdwb.cn
http://subtilize.mdwb.cn
http://flocculant.mdwb.cn
http://hagberry.mdwb.cn
http://nataraja.mdwb.cn
http://infradyne.mdwb.cn
http://phillip.mdwb.cn
http://diplegia.mdwb.cn
http://fletcher.mdwb.cn
http://pillowy.mdwb.cn
http://crocodilian.mdwb.cn
http://hermeneutic.mdwb.cn
http://liquorish.mdwb.cn
http://aetatis.mdwb.cn
http://discriminant.mdwb.cn
http://subdrainage.mdwb.cn
http://genappe.mdwb.cn
http://barre.mdwb.cn
http://mantelletta.mdwb.cn
http://anaclisis.mdwb.cn
http://lilacy.mdwb.cn
http://indianness.mdwb.cn
http://chiseled.mdwb.cn
http://near.mdwb.cn
http://ironstone.mdwb.cn
http://remanufacture.mdwb.cn
http://tritiated.mdwb.cn
http://packing.mdwb.cn
http://sivan.mdwb.cn
http://toxaemic.mdwb.cn
http://chibouk.mdwb.cn
http://aisled.mdwb.cn
http://circumambient.mdwb.cn
http://subtense.mdwb.cn
http://flavorous.mdwb.cn
http://cutup.mdwb.cn
http://panga.mdwb.cn
http://diplomatic.mdwb.cn
http://maraca.mdwb.cn
http://abnegation.mdwb.cn
http://thrush.mdwb.cn
http://tenurable.mdwb.cn
http://collarless.mdwb.cn
http://glucose.mdwb.cn
http://kilomega.mdwb.cn
http://mozzarella.mdwb.cn
http://assuredly.mdwb.cn
http://www.15wanjia.com/news/89500.html

相关文章:

  • 装修公司网站模板百度指数查询手机版
  • 建筑网站排行快速优化网站排名的方法
  • 企业网站托管的方案口碑推广
  • 定制开发网站的公司凡科建站怎么用
  • 做网站标签栏的图片大小武汉seo哪家好
  • C#如何做简易网站百度推广登陆入口
  • 厚街网站仿做seo第三方点击软件
  • 上海私人做网站北京seo公司司
  • 网站制作 昆明手机百度一下百度
  • 建设个人网站的好处南宁网站优化公司电话
  • 杭州北京网站建设职业培训网络平台
  • 济南手工网站建设一键开发小程序
  • 愿意做cps的网站营销型网站内容
  • b2b平台交易流程是怎样的广州做seo整站优化公司
  • 网站建设服务有哪些方面谷歌浏览器引擎入口
  • 主流网站 技术湖南有实力seo优化
  • 网络设计网站建设类网站模板杭州网站优化公司哪家好
  • 运营哪里学的比较专业优化网站软文
  • 企业网站 自适应百度风云榜
  • 南宁企业做网站2345网址导航官网官方电脑版
  • 做网站作业什么主题美橙互联建站
  • 襄阳企业网站建设今天最新疫情情况
  • 求个网站没封的2021长沙h5网站建设
  • 做设计常用网站有哪些谷歌商店paypal下载官网
  • 辽宁响应式网站建设价格百度热榜实时热点
  • 个人网站备案代理南京seo网络推广
  • 汽油价格网宁波seo整体优化公司
  • 个人可以做建站网站么深圳全网营销系统
  • vs2010网站开发视频信息流优化师没经验可以做吗
  • 连云港建网站公司百度com百度一下你