【问题标题】:Google Earth / Processing.js - Implementing Back Culling with 3D ProjectionGoogle Earth / Processing.js - 使用 3D 投影实现反向剔除
【发布时间】:2014-02-04 00:40:37
【问题描述】:

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

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

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

与。很多。困难。

Google Earth ge.getView().project(lat, lon, alt, altMode) 函数是我目前用来将 3D 纬度/经度点投影到 2D 坐标中的函数(然后使用处理在屏幕上的返回点处绘制一个椭圆)。您可以在下面看到:

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 方向上绕地球旋转的能力(即不限制视口)!

感谢堆栈溢出!

【问题讨论】:

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


    【解决方案1】:

    一种不需要您进行任何 3D 数学运算的简单方法是围绕该点创建一个小三角形——想象它代表地板上的一个实际三角形,该点位于该点的中间——投影所有三个点使用 Google Earth project 方法,然后计算出二维三角形的有符号区域。如果面积为正则绘制,如果面积为负则不绘制。

    所以,例如对于纬度和经度(n, m)、项目(n-0.01, m)(n, m+0.01)(n+0.01, m) 以获得二维位置(a, q)(b, r)(c, s)

    然后测试(b - a) * (s - q) - (c - a) * (r - q) 的符号——这实际上是三角形符号面积的两倍,但加倍不会影响符号。这个公式是众所周知的。这里是a StackExchange source

    我是临时输入的,所以我可能混淆了我的惯用手。如果是这样,只需翻转测试:抽签为负,不抽签为正。

    【讨论】:

    • 汤米!这就像一个魅力!如果我能投票给你 10 票,我会 - 非常感谢 ;)
    猜你喜欢
    • 2010-09-12
    • 2010-09-09
    • 1970-01-01
    • 2012-09-03
    • 2011-06-27
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 2015-03-07
    相关资源
    最近更新 更多