2012-12-28 43 views
0

我有執行鄰投影此方法:如何處理自動旋轉屏幕上的正投影?

void myGL::ApplyOrtho(float maxX, float maxY) const 
{ 
float a = 1.0f/maxX; 
float b = 1.0f/maxY; 
float ortho[16] = { 
    a, 0, 0, 0, 
    0, b, 0, 0, 
    0, 0, -1, 0, 
    0, 0, 0, 1}; 

    GLint projectionUniform = glGetUniformLocation(m_simpleProgram, "Projection"); 
    glUniformMatrix4fv(projectionUniform, 1, 0, &ortho[0]); 
    } 

它當我做到這工作得很好iPad屏幕:

ApplyOrtho(2, 2*1024/768); 

這裏是我的渲染圖像:

arrow

但是,當我旋轉到風景時,它看起來像這樣:

landscape arrow

現在我的假設是,這是因爲ApplyOrtho矩陣設置固定投影和而圖像是投影內旋轉,從而越來越胖顯示該投影不旋轉。

順便說一句,這是旋轉:

void myGL::ApplyRotation(float degrees) const 
{ 
float radians = degrees * 3.14159f/180.0f; 
float s = std::sin(radians); 
float c = std::cos(radians); 
float zRotation[16] = { 
    c, s, 0, 0, 
    -s, c, 0, 0, 
    0, 0, 1, 0, 
    0, 0, 0, 1 
}; 
GLint modelviewUniform = glGetUniformLocation(m_simpleProgram, "Modelview"); 
glUniformMatrix4fv(modelviewUniform, 1, 0, &zRotation[0]); 
} 

這是正確的繪圖之前使用。

所以我嘗試,並試圖在此同時我旋轉:

ApplyOrtho(2*1024/768, 2); 

然而這對沒有任何影響,即使旋轉的同時肯定發生。我的形象仍然是「胖」。

  1. 我的解釋是爲什麼肥胖的發生是正確的?

  2. 如何處理自動旋轉屏幕上的正投影?

UDPATE:使用屏幕(未iPhone 5)和使用ApplyOrtho(2,3)ApplyOrtho(3,2)但「胖」三角形的2/3尺寸在橫向保持還試圖此iPhone上。

另外:視口是設置只需一次,所述第一正交之前:

glViewport(0, 0, width, height); 

其中寬度和高度是肖像屏幕的尺寸。

+0

你能告訴你如何設置視口? – Kimi

+0

已更新的問題 – johnbakers

+0

您是通過簡單地調用ApplyRotation來執行輪轉還是由設備方向更改造成的? – Kimi

回答

0

上述不一致的原因是正交投影與屏幕的寬高比不匹配,因此X和Y座標不是相同的屏幕尺寸。使正交比率與視口比例匹配可以解決此問題。因此,旋轉時,圖像將保持完全相同的形狀和大小。