- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道Cesium提供了几种不同的插值方法,包括线性(或二维中的双线性)、Hermite和Lagrange。人们可以使用这些方法对点集进行重新采样和/或创建近似采样点的曲线等。
但是,我的问题是,当 Cesium 渲染 3D 场景并且用户在各处缩放/平移时,Cesium 在内部使用什么方法?这不是程序员有权访问栅格等的情况,因此不能直接介入其中并直接调用插值函数。 Cesium 正在尽可能快地做自己的事情,以响应用户的控制。
我的预感是默认值是双线性的,但我不知道,也找不到任何明确说明所用内容的文档。此外,有没有办法可以强制Cesium在这些事件中使用特定的重采样方法,例如拉格朗日重采样?事实上,这就是我需要做的:强制 Cesium 在场景渲染期间采用拉格朗日重采样。如有任何建议,我们将不胜感激。
编辑:这是问题的更详细描述......
假设我使用 Cesium 建立地球的 3D 模型,包括在模型地球表面的适当位置放置一个灰度图像芯片,然后在 Cesium 窗口中显示结果。如果视点距离地球表面足够远,则窗口的图像芯片部分中显示的像素数将少于图像芯片源中可用的实际像素数。将会发生一些下采样。同样,如果用户反复放大,就会出现一个点,在该点处,图像芯片上显示的像素多于图像芯片源中的实际像素数。将会发生一些上采样。一般来说,每次 Cesium 绘制包含像素数据源的帧时,都会发生重采样。它可以是最近邻(怀疑)、线性(可能)、三次、拉格朗日、埃尔米特或多种不同重采样技术中的任何一种。在我的公司,我们使用铯作为大型政府计划的一部分,该计划需要使用拉格朗日重采样来确保图像质量。 (NGA 认为这最适合其程序和分析工具,并且他们已将其作为合规性要求。因此我们别无选择。)
所以问题是:当用户与模型交互时(例如放大),绘图过程不受程序员的控制。重采样要么发生在 Cesium 层本身(希望),要么发生在更低的层(例如,Cesium 可能依赖的 WebGL 函数)。所以我不知道这次重采样使用了哪种技术。更糟糕的是,如果该技术不是拉格朗日,那么我不知道如何改变它。
所以问题是这样的:Cesium 是否明确地进行了重采样?如果是这样,那么它使用什么技术?如果没有,那么Cesium依靠什么绘图包和函数将图像文件渲染到 map 上? (我可以尝试深入挖掘并确定这些层可能正在使用和/或可用的技术。)
最佳答案
更新:哇,我原来的答案完全误解了你的问题,所以我从头开始重写。
通过新的编辑,很明显您的问题是如何在渲染时为屏幕重新采样图像。这些在 WebGL 中,图像是纹理贴图,将它们快速显示到屏幕的过程是在硬件中实现的,在显卡本身上。 CPU 上的软件性能不足以将单个像素映射到屏幕一次一个,这就是我们拥有硬件加速 3D 卡的原因。
现在有坏消息:该硬件支持最近邻、线性和 map 映射。就是这样。 3D图形卡不使用任何更高级的插值,因为它需要在不到一秒的时间内完成以保持尽可能高的帧速率。
@gman 在他的文章 WebGL 3D Textures 中很好地描述了 Mapmapping。 。它是这是一篇很长的文章,但搜索单词“mipmap”并跳到他对此的描述。基本上单个图像被缩小了在渲染之前分解为较小的图像,因此可以在渲染时选择适当大小的起点。但会有始终是到屏幕的最终映射,如您所见,选择是“最近”或“线性”。
在这里引用@gman的文章:
You can choose what WebGL does by setting the texture filtering for each texture. There are 6 modes
NEAREST
= choose 1 pixel from the biggest mipLINEAR
= choose 4 pixels from the biggest mip and blend themNEAREST_MIPMAP_NEAREST
= choose the best mip, then pick one pixel from that mipLINEAR_MIPMAP_NEAREST
= choose the best mip, then blend 4 pixels from that mipNEAREST_MIPMAP_LINEAR
= choose the best 2 mips, choose 1 pixel from each, blend themLINEAR_MIPMAP_LINEAR
= choose the best 2 mips. choose 4 pixels from each, blend them
我想我能给你的最好消息是 Cesium uses the best of those, LINEAR_MIPMAP_LINEAR
到自己做渲染。如果您对更耗时的图像插值有严格要求,这意味着您要求不使用实时 3D 硬件加速显卡,因为在实时渲染期间无法进行拉格朗日图像插值。
关于zooming - 铯重采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30194496/
我正在尝试添加一个具有多种不同属性的实体,例如 Material (主要是 alpha)和旋转。 RectangleGraphics 覆盖了旋转,并且在我设置 Material 以表示纹理时起作用。
我正在测试 Cesiumjs 以查看它是否可以反射(reflect)近乎实时的体验 - 例如:飞机的位置。 为此,我需要绘制广告牌并让它们移动 - 我知道用铯可以做到这一点,只是不确定如何实现。 代码
我正在使用 Cesium 并希望在视觉上表示相同的两个实体之间的多条折线。例如,从实体 A 到实体 B 的绿色多段线,以及从实体 A 到实体 B 的蓝色多段线。我希望它们不要重叠或混合,所以我想象随着
我想使用铯在我的 map 中通过鼠标事件或键盘事件选项启用/禁用动态放大或缩小。cesium 中是否有启用/禁用此功能的任何选项或功能? 最佳答案 是的,这很简单,只需设置 enableZoom为假。
我有大量代表 map 上数据的框(类似于自定义数据源沙堡示例中的折线)。 我正在使用 addSample 来插入颜色变化,它按预期工作。但是,当我使用 SampledProperty 转换框尺寸时,性
我确信这很简单,但我已经搜索并查看了 Cesium 的文档。我在 Canvas 上绘制了几个点。它们根据它们所代表的内容进行颜色编码。我现在想“点击”一个点并在 JS 中发起一个 Action 。我已
我想这对于真正熟悉 Cesium 的 CZML 文件的人来说是一个简单的问题。我只是想使用 Cesium 将一系列纬度/经度/高度点显示为飞行路径。有人能告诉我“位置”标签应该是什么样的吗? 除非我找
我需要实现跟踪实体的前 View ,它会根据实体的移动而变化。 当我为 viewer.trackedEntity 属性赋值时,相机会占据某个位置。是否可以更改此位置,使相机直接位于跟踪实体的前面? 我
我想让我的相机跟随移动实体的第一人称视角。我不相信 trackedEntity 将适用于此用例,因为我不想查看实体,但我想查看 从它。我还希望用户能够使用鼠标相对于移动实体转动相机(例如,从移动平面的
如何在Cesium中设置不同形状的Z-index?请参阅下面的屏幕截图: 我希望圆柱体中的广告牌图标显示在圆柱体上。 提前致谢! 最佳答案 这并不容易,因为您的圆柱体是实际的 3D 体积,而您的广告牌
现在我使用 cesium-terrain-builder用于生成 .terrain 格式的地形图 block ,但我想知道 Cesium 可以与 float .tif 图 block 一起使用吗? 我
我正在尝试在基于标准 HelloWorld 示例应用程序的测试应用程序中加载以下 geoJson 文件。 { "type": "FeatureCollection", "generator":
当缩放比例增加到一定级别以上时,我想隐藏 map 的标签。 对于这个例子,我想在缩放级别 5 之后隐藏所有与 collection1 相关的标签: https://codepen.io/ollazar
我正在使用 Cesium JS,我是初学者。我在 2D 场景模式下初始化了 Cesium,但我无法将 map 居中。 这是我尝试过的: var widget = new Cesium.CesiumWi
我已将一些概述地球上每个国家/地区的 JSon 数据作为 GeoJSonDataSource 加载到我的 Cesium 项目中。每个国家/地区也作为单独的条目复制到数组中。为了突出显示一个国家/地区,
正在关注 guide at switch2osm.org我能够运行自己的 OSM tile 服务器。 我确实通过使用 webrowser 验证了我的 OSM tile 服务器的状态。例如在 http:
我是一名优秀的程序员,十分优秀!