草庐IT

Cesium 1.91 更新日志 - MSAA 与原生 Promise 来了

岭南灯火 2023-03-28 原文


不兼容式更新?

  • 在下一个版本,也就是 Cesium 1.92,第三方库 when.js 将被原生 Promise API 代替。Cesium.when 将被废弃,且于下个版本移除。关于如何升级,请参考下方个人点评,我转载了官方指导文档。
  • 修复了当 Scene 没有渲染时(例如 css 样式设为 none)相机对象的获取射线方法(camera.getPickRay())引发的异常,这个函数会返回 undefined 了。

新增?

  • 为 WebGL 2.0 添加 MSAA(多重采样抗锯齿)支持。你可以在创建 Viewer 时传递 msaaSamples 选项,也可以用 Scene.msaaSamples 属性控制。
  • 现在,glTF 模型默认使用 ModelExperimental 架构处理。
  • ModelExpertimental 架构中支持切换背面裁剪。
  • 向 Viewer 和 Scene 类的构造参数中添加 depthPlaneEllipsoidOffset,以解决椭球体平面之下的奇怪渲染问题
  • ModelExperimental 架构中支持了 debugColorTiles
  • ModelExperimental 架构中支持了阴影
  • 在所有的矩阵类中添加了 packArrayunpackArray 方法
  • 为矩阵类添加一些仿射变换帮助函数
    • Matrix2:setScalesetUniformScalesetRotationgetRotationmultiplyByUniformScale
    • Matrix3:setScalesetUniformScalesetRotationmultiplyByUniformScale
    • Matrix4:setUniformScalesetRotationgetRotationfromRotation
  • AxisAlignedBoundBox 类添加 fromCorners 方法
  • BoundingSphere 类添加 fromTransformation 方法
  • OrientedBoundingBox 类添加 fromTransformationcomputeCOrnerscomputeTransformation 方法
  • Rectangle 类添加 subsection 方法
  • glTF 的版权信息会标注至版权区域
  • 为 3D Tiles 增加一个选项,它可以决定数据集的版权信息是否显示在屏幕上
  • 修改了版权排序规则为出现的频率

问题修复?

  • 修复了使用 ModelExperimental 架构的模型在更新其模型矩阵时不会更新范围球的错误
  • 修复了在 Safari 浏览器中 FeatureID 纹理的伪影
  • 修复了使用 ModelExpertimental 架构的不透明模型使用半透明着色器,但是未正确渲染的错误

个人点评?

① MSAA

MSAA 就不用说了,推荐条件不错的机器都开,配合 FXAA 提升显示效果。

const viewer = new Viewer('cesiumContainer', {
  msaaSamples: 4 // 1, 2, 4, 8, 默认 1, 越高效果越好, 也越吃性能
})
viewer.postProcessStages.fxaa.enabled = true

二者有什么区别?

  • msaa 发生在管线结束前,准确的说是光栅化阶段对片元进行多重采样,输出到渲染缓冲,然后才绘制到屏幕上
  • fxaa 发生在管线结束后的后处理阶段,对渲染的结果进行图像算法处理

MSAA 在 WebGL 2.0 才有,WebGPU 原生就支持。目前 WebGPU 尚不成熟,WebGL 2.0 前阵子才刚刚完全适配所有主流浏览器,所以 Cesium 对抗锯齿效果的 MSAA 功能支持就比较慢。

② 相机获取射线

获取射线的函数现在返回值类型发生了改变

const ray = viewer.camera.getPickRay() // Ray 或 undefined

③ ModelExperimental

即实验中的 Model,是对原有 Model 类的架构升级,这是为了适配更强大的 glTF,以及为下一代 3D Tiles 准备的。

预计 2022 年这个新架构会转正。

④ 逐渐 ES6

细心的朋友也许观察到了,源代码已经把 var 切换至 let/const 声明变量了。在下一个版本(1.92),CesiumJS 有计划地将第三方异步库 when.js 替换为 ES6 原生 Promise 实现。不过,距离源代码完全使用 async/await 估计还有一段路要走。

关于迁移 Cesium.when,官方是这么说的:

  • 移除所有使用了 Cesium.when 的代码
  • Cesium.defer 代替了 when.defer
  • Promise.all 代替了 when.join
  • 在 Promise 链式调用中,catch 代替了 otherwisefinally 代替了 always;如果你用 async/await 而不是 Promise 链,那这里不需要改变

除此之外,还希望官方团队完成 ES6 的 class、模板字符串的转换。

有关Cesium 1.91 更新日志 - MSAA 与原生 Promise 来了的更多相关文章

  1. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  2. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  3. objective-c - 在设置 Cocoa Pods 和安装 Ruby 更新时出错 - 2

    我正在尝试为我的iOS应用程序设置cocoapods但是当我执行命令时:sudogemupdate--system我收到错误消息:当前已安装最新版本。中止。当我进入cocoapods的下一步时:sudogeminstallcocoapods我在MacOS10.8.5上遇到错误:ERROR:Errorinstallingcocoapods:cocoapods-trunkrequiresRubyversion>=2.0.0.我在MacOS10.9.4上尝试了同样的操作,但出现错误:ERROR:Couldnotfindavalidgem'cocoapods'(>=0),hereiswhy:U

  4. ruby-on-rails - Rails Associations 的更新方法是什么? - 2

    这太简单了,太荒谬了,我在任何地方都找不到关于它的任何信息,包括API文档和Rails源代码:我有一个:belongs_to关联,我开始理解当您没有关联时您在Controller中调用的正常模型方法与您有关联时调用的方法略有不同。例如,我的关联在创建Controller操作时运行良好:@user=current_user@building=Building.new(params[:building])respond_todo|format|if@user.buildings.create(params[:building])#etcetera但我找不到关于更新如何工作的文档:@user

  5. ruby - Sinatra 中的全局救援和日志记录异常 - 2

    如何在出现异常时指定全局救援,如果您将Sinatra用于API或应用程序,您将如何处理日志记录? 最佳答案 404可以在not_found方法的帮助下处理,例如:not_founddo'Sitedoesnotexist.'end500s可以通过调用带有block的错误方法来处理,例如:errordo"Applicationerror.Plstrylater."end错误的详细信息可以通过request.env中的sinatra.error访问,如下所示:errordo'Anerroroccured:'+request.env['si

  6. ruby-on-rails - 使用 Ruby 标准 Logger 每天只创建一个日志 - 2

    我正在使用ruby​​标准记录器,我想要每天轮换一次,所以在我的代码中我有:Logger.new("#{$ROOT_PATH}/log/errors.log",'daily')它运行完美,但它创建了两个文件errors.log.20130217和errors.log.20130217.1。如何强制它每天只创建一个文件? 最佳答案 您的代码对于长时间运行的应用程序是正确的。发生的事情是您在给定的一天多次运行代码。第一次运行时,Ruby会创建一个日志文件“errors.log”。当日期改变时,Ruby将文件重命名为“errors.log

  7. ruby - Cucumber/Savon 省略或删除日志输出 - 2

    在运行Cucumber测试时,我得到(除了测试结果)大量调试/日志相关的输出形式:D,[2013-03-06T12:21:38.911829#49031]DEBUG--:SOAPrequest:D,[2013-03-06T12:21:38.911919#49031]DEBUG--:Pragma:no-cache,SOAPAction:"",Content-Type:text/xml;charset=UTF-8,Content-Length:1592W,[2013-03-06T12:21:38.912360#49031]WARN--:HTTPIexecutesHTTPPOSTusingt

  8. ruby-on-rails - faraday如何设置日志级别 - 2

    我最近将我的http客户端切换到faraday,一切都按预期工作。我有以下代码来创建连接:@connection=Faraday.new(:url=>base_url)do|faraday|faraday.useCustim::Middlewarefaraday.request:url_encoded#form-encodePOSTparamsfaraday.request:jsonfaraday.response:json,:content_type=>/\bjson$/faraday.response:loggerfaraday.adapterFaraday.default_ada

  9. ruby-on-rails - OSX Yosemite 更新破坏了 pow.cx - 2

    升级到OSXYosemite后,我现有的pow.cx安装不起作用。升级到最新的pow.cx无效。通过事件监视器重新启动它也没有成功。 最佳答案 卸载(!)并重新安装解决了这个问题。curlget.pow.cx/uninstall.sh|shcurlget.pow.cx|sh 关于ruby-on-rails-OSXYosemite更新破坏了pow.cx,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/q

  10. ruby - 将 Gitlab 从 9.3.7 更新到 9.3.8 安装 re2 时出错 - 2

    我们在Ubuntu14.04和Gitlab9.3.7上运行,运行良好。我们正在尝试更新到Gitlabv9.3.8的最新安全补丁,但它给我们这个错误:Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension.currentdirectory:/home/git/gitlab/vendor/bundle/ruby/2.3.0/gems/re2-1.0.0/ext/re2/usr/local/bin/ruby-r./siteconf20170720-19622-15i0edf.rbextconf.rbcheckingformain(

随机推荐