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. OpenGL:正投影
- 2. 正投影在OpenGL
- 3. OpenGL的投影裁剪
- 4. openGL - 正交投影矩陣
- 5. OpenGL中的投影矩陣真的是「投影矩陣」嗎?
- 6. 如何在openGL顯示列表中投影/未投影
- 7. Ortho OpenGL ES的投影問題
- 8. opengl混合透視和直接投影
- 9. opengl es投影和android中的相機
- 10. OpenGL紋理投影穿過表面
- 11. OpenGL中的透視投影矩陣
- 12. 使用Opengl的等距投影
- 13. 投影矩陣OpenGL/GLSL問題
- 14. 在OpenGL中使用glm :: ortho投影
- 15. OpenGL-es投影似乎不起作用
- 16. 的OpenGL 3.3投影矩陣錯誤
- 17. 縱橫比拉伸的OpenGL 2D投影
- 18. 使用C#在OpenGL中使用投影?
- 19. OpenGL的矢量投影不精確
- 20. 從OpenGL到DirectX的投影矩陣
- 21. OpenGL投影,視圖和世界矩陣
- 22. 在沒有OpenGL的情況下複製OpenGL正投影行爲
- 23. OpenGL正投影與渲染陰影的問題
- 24. 使用MATLAB投影矩陣反投影
- 25. 帶RestController的彈簧投影投影
- 26. Openlayer投影
- 27. MongoDB的投影
- 28. WPF投影
- 29. Hibernate genericDao投影
- 30. 通過投影