Google Earth / Processing.js - 使用3D投影实现反向剔除

时间:2014-02-04 00:40:37

标签: 3d processing projection google-earth-plugin culling

我目前正在开发一个项目,该项目旨在使用Google Earth API将真实世界数据映射到Google地球地球上。头部的人们要求提供比插件更高的视觉效果(即花哨的线条,图像和具有不同不透明度的形状随着时间的推移而变化),因此我们决定使用Processing.js语言来处理事物的图形方面。

目前,我已在后台建立了GE插件。 Processing.js草图直接位于canvas元素的上方,该元素具有CSS规范: pointer-events:none (即,这允许鼠标与插件交互,而任何写入的内容处理草图显示在顶部!)

我的问题涉及3D投影。当图形显示在GE中时,插件能够处理背景中所有令人讨厌的矩阵变换(意味着如果你在GE中放置一个点:90,lon:0,无论你如何在地球上移动,这一点将保持在北极上方。在Processing overlay中,我试图模拟这个。

使用。许多。困难。

Google地球ge.getView().project(lat, lon, alt, altMode)功能是我目前用于将3D lat / lon点投影到2D坐标(然后使用Processing在返回点处在屏幕上绘制椭圆)的功能。您可以在下面看到:

https://sites.google.com/site/robbieskml/kmltester/Screen%20Shot%202014-02-04%20at%201.28.28%20PM.png?attredirects=0

你会注意到红色和黄色椭圆实际上是地球后面的点。这是我的问题,我迫切需要一些建议/帮助。使用GE插件实现反向剔除的最有效方法是什么,以便Processing.js在环绕地球“背面”行进时不会绘制椭圆。对我来说脑子爆裂的是我仍然希望能够在X,Y和Z周围环绕地球旋转(即不限制视口)!

谢谢Stack Overflow!

1 个答案:

答案 0 :(得分:1)

一种不需要你做任何三维数学运算的简单方法就是在点周围创建一个小三角形 - 想象它代表地板上一个实际的三角形,该点位于中间 - 项目所有三个点使用Google地球project方法,然后计算出2d三角形的有符号区域。如果该区域为正,则绘制,如果该区域为负,则不要。

所以,例如纬度和经度(n, m),项目(n-0.01, m)(n, m+0.01)(n+0.01, m)获取2d位置(a, q)(b, r)(c, s)

然后测试(b - a) * (s - q) - (c - a) * (r - q)的符号 - 这实际上是三角形的有符号区域的两倍,但加倍不会影响符号。这个公式非常有名;这是a StackExchange source

我已经即兴地输入了这个,所以我可能会混淆我的惯用手法。如果是这样,只需翻转测试:绘制为负,不绘制为正。