2016-01-19 151 views
0

我正在研究一個3D地圖應用程序,並且我需要做一些工作,比如從空間的給定點中找出球體(地球)的可見區域,用於諸如剪切映射區域之類的東西。透視投影后球體的輪廓?

如果我可以將地球的輪廓投射到屏幕空間,在那裏剪切多邊形,然後投影到地球表面(緯度/經度),有幾件事情會變得更容易,但是我失去了如何去做那。

是否有一種合理的方式來計算透視投影后的球體輪廓,然後再將合適的方法投影到球體上?

+0

在3D中進行裁剪可能更容易。你如何表示多邊形? –

+0

多邊形將只是國家/地區的形狀。我需要將這些國家剪輯到全球可見的地區,然後我可以將它們投影到屏幕空間和光柵上。我用軟件而不是OpenGL或類似軟件來做這件事。 –

回答

2

您可以用三維裁剪多邊形。球體的輪廓 - 反投影到3D - 將始終是飛機上的一個圓圈。透視投影不會改變這一點。因此,您可以剪切飛機上的所有多邊形。

計算飛機不是太難。如果考慮球體的中心爲原點,那麼飛機,可以在正常的形式表示爲:

dot(n, x) = d 

n是正常的。這個很簡單。它只是從球體中心到觀察者的單位方向矢量。

d是距球體中心的距離。這有點難但不太難。如果l是觀察者的球心的距離,r是球體的半徑,然後

d = r^2/l 

這是你可以用它來剪輯您的多邊形在三維平面上。如果你需要在它的圓的半徑,可以用下面的公式:

r_c = r/sqrt(1 - r^2/(l-d)^2) 
+0

我明白了,所以你說的是在3D平面而不是2D平面上對多邊形進行修剪。說這架飛機和地球的交點會給我可見的地平線多邊形是否正確? –

+0

是的,這是正確的。裁剪將是2D/3D的混合。對於穿過飛機的多邊形,您還必須考慮該圓圈(作爲輪廓),然後基本上是2D裁剪。 –

+0

好吧,我認爲這很有道理,我會給它編碼,謝謝! –

0

讓我們在球體上的一個點在球面座標(cos(u)sin(v),sin(u)sin(v),cos(v))和任意投影中心(x,y,z)

我們表示的是一個突出的線相切由線的方向和從球體的原點的矢量的垂直條件球體:

(x-cos(u)sin(v))cos(u)sin(v) + (y-sin(u)sinv))sin(u)sin(v) + (z-cos(v)) cos(v) = 0 

這簡化到

x cos(u)sin(v) + y sin(u)sin(v) + z cos(v) = 1 

這是經度/緯度座標中的曲線。您可以根據v或相反地解決u