6
A
回答
13
我以前沒使用斜/騎士的投影,但下面應該給你如何進行一個想法:
創建一個4x4矩陣剪切,
H(θ, Φ) = | 1, 0, -cot(θ), 0 |
| 0, 1, -cot(Φ), 0 |
| 0, 0, 1, 0 |
| 0, 0, 0, 1 |
θ是X中的剪切力,Φ是Y中的剪切力,而Z是獨立的。
(ref: slide 11 of http://www.cs.unm.edu/~angel/CS433/LECTURES/CS433_17.pdf)
乘上你的正投影,
| 2/(r-l), 0, 0, -(r+l)/(r-l) |
| 0, 2/(t-b), 0, -(t+b)/(t-b) |
| 0, 0, 2/(f-n), -(f+n)/(f-n) |
| 0, 0, 0, 1 |
(由左,右,底部,頂部描述,遠近)
(參考:http://en.wikipedia.org/wiki/Orthographic_projection_%28geometry%29)
然後OpenGL允許你通過函數直接上傳這個矩陣(作爲16個浮點數組):
GLfloat proj[16] = { ... };
glMatrixMode(GL_PROJECTION); // Make sure we're modifying the *projection* matrix
glLoadMatrixf(proj); // Load the projection
對於深入瞭解更在觀看和變換在OpenGL中是如何工作的,我想請您看看Chapter 3 of the OpenGL "Red Book"。在那裏,他們使用glOrtho()來創建和應用正交投影。
編輯:
由於datenwolf指出,請記住,在OpenGL中的矩陣元素在列優先順序指定。
6
OpenGL允許您指定任意投影矩陣。構建期望的投影矩陣自己在每個維度傳入頂點到-1的範圍內映射到1,然後使用
GLfloat custrom_projection[16] = {
...
};
glMatrixMode(GL_PROJECTION);
glLoadMatrix(custom_projection);
OpenGL的索引在式柱主要順序的矩陣元素加載它,即
0 4 8 12
1 5 9 13
2 6 10 14
3 7 11 15
0
由於所謂的傾斜投影是通過將投影平面旋轉一段距離右側的一個角度而獲得的,這個角度除了沿着旋轉軸線產生一個延長的圖像外,我認爲正好可以縮放垂直正交沿着該軸投影,增加了\csc\theta
。這個說法可以通過三角相等證明,例如\sin\theta+\cos\theta \cot\theta=\csc\theta
。如果您的傾斜投影由\theta
和\phi
指定(如盧克的答案中所示),則可以根據這兩個角度(例如\arctan(\tan\theta\sqrt(1+\cot^2\phi))
)將軸角度計算爲三角函數。
相關問題
- 1. 斜投影
- 2. OpenGL:正投影
- 3. 正投影在OpenGL
- 4. OpenGL投影矩陣
- 5. 設置opengl透視投影
- 6. OpenGL獲取投影矩陣
- 7. OpenGL 3.0+:正投影矩陣
- 8. 在OpenGL中更改投影
- 9. OpenGL的正投影剪輯
- 10. openGL - 正交投影矩陣
- 11. OpenGL ES透視投影
- 12. OpenGL的投影裁剪
- 13. 如何在openGL顯示列表中投影/未投影
- 14. OpenGL中的投影矩陣真的是「投影矩陣」嗎?
- 15. OpenGL紋理投影穿過表面
- 16. 透視投影矩陣不工作openGL
- 17. 使用C#在OpenGL中使用投影?
- 18. 的OpenGL 3.3投影矩陣錯誤
- 19. OpenGL的矢量投影不精確
- 20. OpenGL中的透視投影矩陣
- 21. 使用Opengl的等距投影
- 22. 用opengl和Antialiasing投影圖像
- 23. Ortho OpenGL ES的投影問題
- 24. opengl es投影和android中的相機
- 25. OpenGL正交,透視和截錐投影
- 26. 在OpenGL中使用glm :: ortho投影
- 27. OpenGL 2D投影矩陣問題
- 28. OpenGL模型,視圖,投影矩陣
- 29. Opengl的攝像頭*投影*座標=無
- 30. opengl混合透視和直接投影