2010-11-04 71 views
1

是否可以通過對ModelView或Projection矩陣的非標準操作來彎曲或扭曲OpenGL空間?例如,命令glScale(scaleFactor,scaleFactor,noScaleFactor)將沿着X和Y軸以統一的方式重新調整場景的所有元素的大小。可以通過ModelView或Projection矩陣彎曲或扭曲OpenGL空間嗎?

但是,如果可以以非均勻的方式扭曲OpenGL空間,它將極大地擴展不同效果的潛力。特別是,我後面的效果是類似魚缸般的縮放效果,因此元素會以線性或非線性的方式相對於它們與用戶的接近程度(在我的情況下由Z軸表示)放大。

所以glScale命令的縮放上面會在沿Z軸的每個元素的位置或有:

glScale(功能1(Z距離),函數2(Z距離),noScaleFactor)

回答

4

模型變換&投影是矩陣。所以你只能進行線性轉換。您可以使用頂點着色器來嘗試您的效果,但您需要一個相對密集的網格,以便您的變換看起來不錯。着色器將修改每個頂點位置,但由3個頂點構成的三角形仍將保持不變。

以下是Fisheye Lens Vertex Shader的示例。

+0

用opengl做這樣的效果有多困難? https://youtu.be/WeOBXmLeJWo?t=43s事實上,它甚至有可能使用頂點着色器創建[蟲洞]效果(https://en.wikipedia.org/wiki/Wormhole)效果? – inf3rno 2016-08-20 22:24:58

+0

@ inf3rno這個問題和答案來自2010年。如果你沒有直接在討論中添加一些東西,請創建你自己的問題。 – daveydave400 2016-09-07 01:02:22

0

自從我玩過開放GL之後,我已經有一段時間了,但是我最初的反應是你應該看看使用OpenGL着色器來解決這個問題。看看這個類似的帖子: link text

0

如果開啓角度(例如,通過gluPerspectiveglFrustum),你會得到線性縮放取決於從虛擬攝影機的距離 - 這將是沿Z軸默認。根據您爲相機位置,近平面和遠平面設置的距離,您可以/會得到類似於極廣角鏡頭的誇張視角 - 但它仍然是一個完美的直線鏡頭,所以只適用於例如,矩形中的線將始終保持直線,而不會使用魚眼鏡頭獲得的曲率。

然而,最終,所有與矩陣有關的都是線性變換,所以你不會從它們彎曲或彎曲。如果你想要魚眼鏡頭的桶形變形,你需要做不同的處理,可能在着色器中。

0

OpenGL沒有「空間」的概念。你不能說「我希望[0,0,0]和[10,10,0]之間的所有東西都是藍色的」或類似的東西。 選擇性縮放必須通過您的程序來完成,通過根據需要轉換您的vert,直到它們碰到GL管。 (也就是說,獲得距離,沿着所需的軸移動垂直軸,然後將THAT向下推)。這意味着更多的工作,但如果我理解你想達到的效果,你不能用矩陣來做。