2017-04-25 52 views
0

我有一個表面,給定爲r[i, j],phi[i, j]theta[i, j](球座標系統中的高度圖)。如何繪製一個大的3D表面(10000 x 10000點)?

這是相當大的:約10K×10K點。我知道它可以很容易地繪製爲二維色彩圖像(例如,在PyQtGraph中),但我想以某種方式將它繪製爲曲面(以演示圓形地球的效果)。

有沒有人已經繪製這樣的大表面?你是如何對付他們的?

+0

100M分的確是一個很大的數字。你確定你確實需要這個級別的精度,爲什麼? – hidefromkgb

+0

那麼,AFAIK,一些3D引擎可以省略多餘的點數?只有當一個區域放大時,才需要完全精確度,而不是整個表面。 – Felix

+2

是的。但構建LOD是一項幾乎不適合運行時間的任務。 – hidefromkgb

回答

2

LoD是你必須實現的東西。對於高程數據來說很簡單;四叉樹是完成此任務的完美搭配,您可以使用高質量的濾波器內核。由於四叉樹中的細化遵循幾何級數,因此總內存需求收斂到2×原始數據集。

三角形球體有幾點注意事項:你總是會出現兩極或不連續;當使用球面座標時,你有兩個極差面元素退化的極點,這是你想避免的。

更好的方法是將球體表示爲基於立方體的6邊的映射;即假設立方體的面被細分爲期望的分辨率並且該網格的每個頂點投影到基球的表面上。這樣做的一個好的副作用是,您實際上可以將您的高度圖數據存儲在立方貼圖紋理圖像中,並完成濾波的LoD級別。在頂點着色器中,您可以對數據進行採樣以取代網格。

網格LoD可以通過多種方式實現。但是,這裏有一個有趣的建議:從屏幕空間中的網格開始,將其投影到要採樣的球體上。這樣,您將生成的頂點恰好只是實際可見的球體部分;因爲您要取代頂點,所以需要添加一點點的邊距以達到較好的效果。在地平線上方的頂點將會錯過球體;很容易將這些頂點剪切到水平線(找到二次方程的根)。您可以在頂點着色器中執行所有這些操作,並使用鑲嵌陰影着色以在適用的情況下優化網格。

關於10k×10k網格分辨率的註釋。除非您要在至少20k×20k像素的顯示器上顯示,否則有限的顯示分辨率實際上會對導致頻率混疊的網格進行二次採樣(參見奈奎斯特定理)。