2012-05-31 107 views
6

在我的previous question中,確定了在對四邊形進行紋理化時,面被分解爲三角形,並以仿射方式插入紋理座標。線性/非線性紋理映射扭曲的四邊形

不幸的是,我不知道如何解決這個問題。 provided link是有用的,但它不會產生預期的效果。作者得出結論:「請注意,圖像看起來好像是延伸到距離中的長矩形四邊形......由於產生這種」錯誤的深度感知「,它會變得相當混亂......」。

我想要做的是讓紋理保持紋理的原始縮放比例。例如,在梯形情況下,我希望紋理像素的垂直間距相同(例如使用繪圖程序創建的示例):

請注意,由於垂直間距相同,四邊形的明顯失真,紋理空間中的直線不再是世界空間中的直線。因此,我相信所需的映射是非線性的。

現在的問題是:這是甚至可能在固定功能管道?我甚至不確定對於更一般的四邊形來說「正確的答案」是什麼;我認爲插值函數可能會非常快速地變得非常複雜,並且我意識到「保留原始尺度」並不完全是算法。世界空間三角形在紋理空間中不再是線性的。

順便說一句,我不真正瞭解3 和4 紋理座標;如果有人能指點我一個資源,那會很棒。

回答

0

哇這是一個相當複雜的問題。基本上你並沒有將觀點帶入方程式。您的最終x,y座標除以旋轉時得到的z值。這意味着您從相機獲得的紋理空間(s,t)會發生較小的變化。

但是通過這樣做,您可以有效地隨着z的增加進行線性插值。我在1997年寫了一個ANCIENT demo,這被稱爲「仿射」紋理映射。

這是因爲你正在用x和y除以z,你實際上需要使用「1/z」來插入你的值。這適當地考慮了正在應用的視角(當你將x & y除以z)。因此,你最終以"perspective correct" texture mapping

我希望我可以進入更多的細節,但在過去15年的酒精濫用,我的記憶有點朦朧;)有一天,我很樂意重新訪問軟件渲染, m相信隨着OpenCL的興起,它很快就會成爲編寫渲染引擎的更好方法!

無論如何,希望有些幫助和道歉,我不能更多的幫助。 (作爲一個在15年前我認識到所有可用資源的時候,互聯網使我的工作和生活變得如此簡單。從第一個工作開始原理是非常痛苦的,我記得最初嘗試1/z插值,但它越來越小,因爲它越來越小,當我倒過來時,我放棄了它......直到今天,隨着我的知識呈指數級增長,我仍然真的希望我寫了一個「慢」但完全透視正確的渲染器......有一天,我會繞到它;))

祝你好運!