update: 2013/08/29
reference:
0. 原文: Rendering 3D Anaglyph in OpenGL
1. I touchs: Rendering 3D Anaglyph in OpenGL - 1
2. I touchs: Rendering 3D Anaglyph in OpenGL - 2
3. I touchs: Rendering 3D Anaglyph in OpenGL - 3
G. 立體視錐變量
1. 到此為止, 我們已經有充分的認識, 可以計算立體視錐的變量, 以用在將來的
OpenGL 程式中. 觀察以下的圖示:
2. 雖然上面這張圖看起來蠻可怕的, 但是實際上並沒有加入新的資料. 如果, 到
目前為止你都瞭解所有討論的東西, 你將可以輕而易舉地從頭到尾聽懂這簡單
的計算. 如之前所述, 二個攝影機位在 X 軸上的 L 點與 R 點. L與R這二點的間隔
為
朝著負 Z 軸方向. 視錐的近截距(near clipping distance)為
從頂視圖來看, 虛擬螢幕的二個端點為 A 與 B. A 點為二個視錐的左邊會合之處,
而 B 點為二個視錐的右邊會合之處.
3. 在 OpenGL 中, 建立非對稱視錐的唯一方式是經由 glFrustum(). 而
gluPerspective() 只能建立對稱的視錐, 因此在此例中不能使用.
gluPerspective() 採用自然觀看的變量, 例如: 沿著 Y 方向的視野
(field of view)
近截距和遠截距. 然而, 對於 glFrustum(), 你必須要提供近截面
(near clipping plane)的上, 底, 左與右邊的座標, 而且還要有近截距和遠截距.
我們將會從上方的二個視錐幾何中, 計算這些變量.
4. 在圖中, 對應於虛擬螢幕的單一視錐等同於 AOB. 其沿著 Y 方向的視野為:
5. glFrustum() 函式:
glFrustum( GLdouble leftX, GLdouble rightX,
GLdouble bottomY, GLdouble topY,
GLdouble nearZ, GLdouble farZ);
bottom=−top
這些值, 同時適用於左邊和右邊的視錐.
虛擬螢幕的一半寬度 a 為:
接著, 看看左邊的視錐 ALB. 近截面與
右邊相交的距離為
所以, 我們就能夠很快地計算出
藉由交換 b 與 c 的值, 就可以獲得
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。