700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > cesium 鼠标点击事件获取各种坐标

cesium 鼠标点击事件获取各种坐标

时间:2022-10-17 00:13:42

相关推荐

cesium 鼠标点击事件获取各种坐标

文章目录

cesium点击事件屏幕坐标世界坐标(也叫笛卡尔坐标Cartesian3)场景坐标问题列表:

cesium点击事件

new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas).setInputAction((movement)=>{console.log(movement)}, Cesium.ScreenSpaceEventType.LEFT_CLICK)

屏幕坐标

屏幕坐标,就是点击后,获取的点距离你的浏览器左边和上边的距离

new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas).setInputAction((movement)=>{console.log("屏幕坐标:",movement);}, Cesium.ScreenSpaceEventType.LEFT_CLICK)

世界坐标(也叫笛卡尔坐标Cartesian3)

我们先来看下,官方文档api

pickEllipsoid(windowPosition, ellipsoid, result) → Cartesian3windowPostion → 二维坐标(屏幕坐标)ellipsoid→ 椭球体result → 返回结果文档注释:如果选中了椭球面或映射,则返回椭球面或映射在世界坐标下的表面上的点。如果没有选中椭球面或映射,则返回undefined

这里是通过二维屏幕坐标转换的,下面,我们来看看三维模式下的操作:

getPickRay(windowPosition, result) → RaywindowPosition → 屏幕二维坐标result → 返回结果文档注释:在世界坐标中,从摄像机位置通过窗口位置的像素创建一条光线,返回射线的笛卡尔坐标位置和方向

然后,我们发现,返回的结果略微有些差异;然后查阅资料,发现有人把ray这种类型的坐标,也叫地标坐标,就是点击处地球表面的世界坐标,不包括模型、倾斜摄影表面。

场景坐标

pickPosition(windowPosition, result) → Cartesian3文档注释:返回从深度缓冲区和窗口位置重建的笛卡尔坐标位置。从深度缓冲区在二维重建的位置可能略有不同,那些重建的三维和哥伦布视图。这是由于透视和正投影深度值分布的差异造成的。设置场景#pickTranslucentDepth为true,以包含半透明原语的深度;否则,这本质上就是挑选半透明的原语。

上面翻译的比较机械,但是可以简单的理解,这个坐标的获取,是受深度缓冲区影像的,那么我们去看看什么是pickTranslucentDepth

容器的所有三维图形对象和状态在一个铯虚拟场景。一般来说,场景不是直接创建的;相反,它是由CesiumWidget隐式创建的。contextOptions参数细节:默认值是:{webgl:{α:假的,深度:真的,模板:假的,平滑:真的,powerPreference:“高性能”,premultipliedAlpha:真的,preserveDrawingBuffer:假的,failIfMajorPerformanceCaveat:假},allowTextureFilterAnisotropic:真正的}webgl属性对应于用于创建webgl上下文的WebGLContextAttributes对象。webgl。alpha默认值为false,与标准WebGL默认值true相比,这可以提高性能。如果应用程序需要使用alpha混合将铯合成到其他HTML元素之上,请设置webgl。α为true。其他webgl属性与WebGLContextAttributes的webgl默认值相匹配。允许texturefilter蛤异性默认值为true,在支持WebGL扩展时支持蛤异性纹理过滤。将此设置为false将提高性能,但会损害视觉质量,特别是对于水平视图。

也是直接百度翻译的,大概意思就是对视觉的一种影响设置;由于这个坐标需要有模型支持才能显示,所以这里我就不一一展示了.

问题列表:

如何解决坐标偏移?

因为上述坐标都是在没有加高程的情况下,我们知道,作为GIS应用,不可能不加高程的;但是加了高程之后,坐标就存在偏移情况,那么如何解决呢?

首先,我们把已经掌握的知识情报总结一下:

总结完后,我发现,其实,我们只需要辨别清楚pickEllipsoid和getPickRay在高程时的精度区别即可

首先啊,我们要弄清楚个问题,就是为什么要区分高程对其影响,因为我们在画点,线面时,很多时候,是期望点,线,面是贴地的

可以看到,当开启高程后,我们画的模型会被高程遮挡;这时,我们需要关闭深度检测,然后还要贴地,当我们都设置好后,看看效果

明显看到了鼠标点击位置和实际位置的偏移,这个时候,我们换成ray,来试试

然后,问题就解决了…

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。