我有一個程序,我需要將二維紋理(簡單圖像)應用到使用marching-cubes算法生成的曲面。我可以訪問幾何圖形,並且可以相對容易地添加紋理座標,但生成座標的最佳方法是避開我。OpenGL,將紋理從圖像應用到等值面
該卷中的每個點表示一個數據單位,並且每個數據單位可能具有不同的屬性。爲了簡化事情,我正在考慮將它們分類爲「類型」,併爲每種類型分配紋理(或單個大紋理圖集的一部分)。
我的問題是我不知道如何生成適當的座標。我可以將類型紋理的位置存儲在類型類中,然後使用它,但接縫會嚴重拉伸(如果兩個相鄰點使用圖集的不同部分)。如果可能的話,我想在接縫處混合紋理,但我不確定最好的方式來做到這一點。混合是可選的,但我需要以某種方式紋理頂點。可能但不希望的是,將幾何體分成每個類型的部分,或者爲了紋理目的複製頂點。
我想盡量避免使用着色器,但如果有必要,我可以使用頂點和/或片段着色器來進行紋理混合。如果我使用着色器,告訴它的最有效方法是紋理或部分樣本?看起來像通過參數傳遞類型將是最簡單的方法,但可能很慢。
我的體積相對較小,每個維度8-16點(爲了加速生成,我將它們縮小了一些,但在特定時間有很多屏幕顯示)。我簡要地考慮使等值面的體積分辨率爲兩倍,因此每個點具有更多的頂點(理論上爲8),這可以簡化紋理。不過,似乎並不會讓混合更容易。
要構建曲面,我使用的是OpenGL的Visualization Library及其行進立方體和音量系統。我生成的幾何圖形很好,只需要弄清楚如何紋理。
有沒有辦法有效地做到這一點,如果是的話是什麼?如果沒有,有沒有人有更好的方法來處理卷的紋理的想法?
編輯:要注意,紋理不是簡單的顏色漸變。它實際上是一種紋理,通常具有圖案。因此,繪製它的困難,一個梯度將是微不足道的。
編輯2:爲了幫助澄清問題,我將添加一些示例。他們可能只是混淆事物,所以考慮一切超出明確的事實,如果可能的話,這些只是幫助。
我的幾何體是立方體,總是(加載,生成並保存在立方體中)。如果形狀影響可能的解決方案,就是這樣。
我需要應用紋理,包括模式和/或顏色(根據點的「類型」獨特的幾何)到幾何,在一種技術類似於爲地形完成的噴濺(這不是地形,但是,所以我不知道是否可以使用相同的技術)。
着色器是一個快速簡便的解決方案,儘管我想避免它們,如果可能的話,正如我之前提到的。在固定功能的流水線中可用的東西最好,主要是爲了稍微提高兼容性和開發時間。由於這只是一個小幅增加,如果需要,我將使用着色器和多通道渲染。
不知道是否有其他的澄清是必要的,但根據需要,我會及時更新的問題。
「網面展平」實際上研究得非常好(是的,可以視爲能量最小化問題);看到我的答案重新適形映射。 – timday 2010-11-04 01:04:11
我不確定我是否正確說出我的問題。我有一個卷,是的,我從中產生幾何。但是,我需要(儘管這裏的術語可能不準確),根據表面屬性將各種2D紋理貼圖到該幾何圖形上。那些屬性目前並不存儲在幾何體或體積紋理中。我可以以某種方式添加它們,但它們現在保存爲整數,我想不出一種簡單的方法將頂點拼接到頂點,以便着色器可以在不通過浮動的情況下讀取它們。 – ssube 2010-11-04 02:28:10
你不能避免着色器中的浮點數,但是你可以將24位整數數據(尾數)打包到每個浮點數中,並且每個屬性可以有一個浮點數vec4。 – 2010-11-04 03:22:07