2010-04-07 99 views
2

我從正交渲染渲染紋理四邊形,並且想通過修改四邊形的UV和頂點位置來模擬「深度」(左上角,右上角,左下角,右下)。用正交渲染模擬3D'卡片'

我發現如果我做左上角和右下角y位置是相同的我沒有得到一個線性'歪斜',而是一個扭曲的一個,其中紋理覆蓋頂部三角形(它構成四邊形)似乎被壓扁,而底部三角形紋理看起來很正常。

我可以改變紫外線,四個點上的任何四點(但只在二維空間,它是正射投影,所以三維空間無關緊要)。所以基本上我試圖在正交投影的二維四邊形上模擬透視,任何想法?它甚至在數學上可行/可行嗎?

理想情況是我可以通過一個函數設置x/y旋轉以及虛擬z'位置'(它模擬z深度)並在內部看到它將位置/ uvs計算爲創建3D效果。這似乎應該都是數學的,一組二維變換可以應用到四邊形的每個角來模擬深度,我只是不知道如何使它發生。我猜想這需要三角函數或其他什麼東西,我正在努力研究數學,但沒有取得太大進展。

這裏就是我的意思:

alt text

左上只是卡,中心是卡X度的y旋轉和最右邊的是與x和不同程度的Y軸旋轉卡。

+0

你想要達到的目標和實際得到的結果的一些圖像將會使問題變得更加清晰。使用imgur.com/免費和快速的圖像存儲。 – shoosh 2010-04-07 10:47:23

+0

我剛剛添加了一張圖片 – tweetypi 2010-04-07 10:55:03

+2

您的圖片顯示的是透視投影,而不是正投影。你想要哪一個? – Thomas 2010-04-07 11:11:09

回答

4

要計算角落的二維座標,只需選擇在三維座標和應用3D透視方程:

原卡的角落(X,Y,Z)

應用旋轉(由矩陣乘法)你(X「 Y」,Z')

應用的透視投影(選擇一些相機的起源,方向和視野) 對於最簡單的情況下,它是:

  • X ''= X '/ Z
  • Y ''= Y'/ Z

現在的更大的問題是用於獲得紋理的紋理座標從像素座標:

正確爲你的方法是使用以下形式的單應變換:

  • U(X,Y)=(AX + CY + E)/(GX + HY + 1)
  • V(X,Y) =(bx + dy + f)/(gx + hy + 1)

事實上,這是應用於飛機的有關方程的結果。 (其中U,V in [0 ..,0,0,...,0,0,...,0,0,...,1]):

  • U(頂部 '',左')=(0,0)
  • U(頂部 '',右')=(0,1)
  • U(底部',左 '')=(1,0)
  • U(底',對 '')=(1,1)

但是你的2D渲染架構可能使用,而不是雙線性插值:

  • U(x,y )= A + B * X + C * Y + d *(X * Y)
  • V(X,Y)= E + F * X + G * Y + H +(X * Y)

在這種情況下,您會看到不好的效果。

而且如果渲染器將四邊形分成兩個三角形,情況會更糟!

因此,我認爲只有兩種選擇:

  • 使用3D渲染
  • 計算紋理自己,如果你只需要一些圖片,而不是實時動畫。
+0

簡而言之,問題是你不能只計算角的位置,你必須分別計算每個像素在紋理中的位置。這是因爲更遠的紋理看起來更小,但是如果您只是計算角落位置並假定紋理在它們之間被均等拉伸,則三角形的較遠部分將具有太大的紋理,並且接近的部分紋理太小。 – tloflin 2010-04-07 15:44:20