opengl中場景變換|2D與3D互轉換(轉)


opengl中場景變換|2D與3D互轉換

我們生活在一個三維的世界——如果要觀察一個物體,我們可以:
1、從不同的位置去觀察它。(視圖變換)
2、移動或者旋轉它,當然了,如果它只是計算機里面的物體,我們還可以放大或縮小它。(模型變換)
3、如果把物體畫下來,我們可以選擇:是否需要一種“近大遠小”的透視效果。另外,我們可能只希望看到物體的一部分,而不是全部(剪裁)。(投影變換)
4、我們可能希望把整個看到的圖形畫下來,但它只占據紙張的一部分,而不是全部。(視口變換)

這些,都可以在OpenGL中實現。

墨卡托坐標變換


 

OPENGL-----3D到2D坐標變換


 

OPENGL-----2D到3D坐標變換

 


 

2D到3D的變換其實是3D到2D的逆變換

 

1.視口變換

 

使用glViewport來定義視口。其中前兩個參數定義了視口的左下腳(0,0表示最左下方),后兩個參數分別是寬度和高度。

glViewport負責把視景體截取的圖像按照怎樣的高和寬顯示到屏幕上。

效果如圖:


 

2.透視投影

 

glMatrixMode(GL_PROJECTION);                      // 設置當前矩陣為投影矩陣。  
glMatrixMode設置當前矩陣模式:
GL_MODELVIEW,對模型視景矩陣堆棧應用隨后的矩陣操作.
GL_PROJECTION,對投影矩陣應用隨后的矩陣操作.
GL_TEXTURE,對紋理矩陣堆棧應用隨后的矩陣操作.
glLoadIdentity(); // 重置當前指定的矩陣為單位矩陣 

將當前的用戶坐標系的原點移到了屏幕中心:類似於一個復位操作。

glLoadIdentity該函數的功能是重置當前指定的矩陣為單位矩陣.在語義上,其等同於用單位矩陣調用glLoadMatrix。

    glFrustum(l, r, b, t, n, f);   //將當前矩陣與一個透視矩陣相乘,把當前矩陣轉變成透視矩陣  

該函數構造了一個視景體用來將模型進行投影,來裁剪模型,決定模型哪些在視景體里面,哪些在視景體的外面,在視景體之外的就不可見。

注:通常,glMatrixMode和glLoadIdentity一同使用,用於矩陣模式切換。

3.模型變換

    glMatrixMode(GL_MODELVIEW);  
    glLoadIdentity();  
    glScissor(0, 0, iWidth, iHeight);  

glScissor裁剪函數,指定裁剪的寬高。

glTranslate*,把當前矩陣和一個表示移動物體的矩陣相乘。三個參數分別表示了在三個坐標上的位移值。

glRotate*,把當前矩陣和一個表示旋轉物體的矩陣相乘。物體將繞着(0,0,0)到(x,y,z)的直線以逆時針旋轉,參數angle表示旋轉的角度。

glScale*,把當前矩陣和一個表示縮放物體的矩陣相乘。x,y,z分別表示在該方向上的縮放比例。

參考網址:

http://blog.csdn.net/a49688448/article/details/17999923


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM