2017-03-21 58 views
0

有人能告訴我這段代碼中的if-else語句有什麼意義嗎?它究竟做了什麼? 特別是它在glOrtho中以寬度分割的部分。openGl重塑函數

*的情況下,該方法是不明確的任何人,這句話可能幫助..

void myReshape(int w, int h) 
{ 
    glViewport(0, 0, w, h); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    if (w <= h) 
     glOrtho(-50.0, 50.0, -50.0*(GLfloat)h/(GLfloat)w, 
      50.0*(GLfloat)h/(GLfloat)w, -1.0, 1.0); 
    else 
     glOrtho(-50.0*(GLfloat)w/(GLfloat)h, 
      50.0*(GLfloat)w/(GLfloat)h, -50.0, 50.0, -1.0, 1.0); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

} 

Thanx提前「這種重塑通過使視和世界的窗口具有相同的縱橫比保留形狀」!

回答

3

本質想法是保持投影方形高寬比(這是的w通過h劃分爲)即在XY平面內與邊長100(世界空間單位)的正方形圍繞所選擇的XY原點(0,0)適合於窗口大小(這就是if用於決定窗口的兩種尺寸中的哪一種尺寸是短尺寸)的短的

2

長寬比可以以兩種不同的方式來指定:

  1. width/height
  2. height/width

如果寬度大於高度,然後width/height > 1height/width < 1

同樣,如果高度大於寬度,width/height < 1height/width > 1

我們不能突起的寬度和高度設定爲相同的值,如果屏幕的尺寸是不相等的值。否則,一切都將出現拉伸:

enter image description here

因此,我們乘以的縱橫比的尺寸中的一個。

如果寬高比大於1,則應將其乘以較大的維度。

同樣,如果寬高比小於1,它應該乘以較小的維度。

您的例子做什麼,是確保縱橫比始終保持大於1大。

因此,它總是必須乘以更大的尺寸,這可能會有所不同。那就是如果其他情況下,是有什麼:

  • 如果w <= h高度是更大的尺寸),縱橫比乘以到的glOrtho();
  • 否則頂部/底部參數(h < w,寬度是較大尺寸),縱橫比乘以左/右自變量的參數glOrtho();

有效中,X和Y維度(與使用的if-else殼體的)不能低於100個單位(-50到+50) - 因爲縱橫比爲總是大於1

+0

真的,我不能夠感謝你。你對我很有幫助。感謝名單。 – Chie

+0

沒問題的隊友。祝你好運,進一步發展:) – SporreKing