2017-06-22 57 views
1

我已經將模型集成到OpenGL中並實現了一些鍵盤功能,例如在正交視圖和透視圖之間切換。您也可以放大和縮小攝像頭視圖。現在我已經認識到,在切換到正交圖像之後,再回到視角,模型會遇到很多問題。第一個:如果我現在在透視圖中改變水平相機視圖,那麼在經過一段時間後(經常按下相機視圖鍵),模型會丟失。第二個問題是,我不能真正放大和縮小orthografic視圖。我試圖擴大我的模型,因爲我認爲它可能太大,但這沒有幫助。我不知道爲什麼正交函數在透視圖中創建這個問題,因爲沒有按下正確的關鍵,在透視圖中一切正常。OpenGL在正視和視覺問題之間切換

//change to perspective 
case 'p': 
    if (!(perspective)) { 
     projection = glm::perspective(zoom, 1.0f, 0.1f, 100.0f); 
     perspective = true; 
    } 
    break; 

//change to ortho 
case 'o': 
    if (perspective) { 
     projection = glm::ortho(-100.0f, 100.0f, -100.0f, 100.0f, -1000.0f, 1000.0f); 
     perspective = false; 
    } 
    break; 

// zoom out 
case '-': 
    if (zoom <= 3.0236f) { 
     zoom += 0.1f; 
     if (perspective) { 
      projection = glm::perspective(zoom, 1.0f, 0.1f, 1000.0f); 
     } 
     else { 
      projection = glm::ortho(-0.1f - zoom, 0.1f + zoom, -0.1f - zoom, 0.1f + zoom, -10000.0f, 10000.0f); 
     } 
    } 
    break; 

與改變的前綴

我希望有人能夠幫助同爲變焦謝謝

,如果你需要更多的細節或多個代碼,請讓我知道

編輯: 對於第一個問題我正在清除顯示函數中的深度緩衝區的代碼

void display() 
{ 
     ... defined camera settings code here .... 


    glClear(GL_DEPTH_BUFFER_BIT); 
    glClearBufferfv(GL_COLOR, 0, color); 
    glActiveTexture(GL_TEXTURE0); 
    glBindTexture(GL_TEXTURE_2D, texture); 

    // set shader param and calculate matrices 
    modelView = view * modelView * model; 
    ... 
    glDrawArrays(GL_TRIANGLES, 0, obj.vertices.size()); 

    glutSwapBuffers(); 
} 

我現在也認識到,在從正視圖切換到透視圖後直接使用相機視圖更改時,透視圖中的模型纔會丟失。如果我先按下放大/縮小改變透視,然後用攝像機視圖後改變了一切工作正常

+0

這可能有助於節省您的矩陣的狀態兩種類型'perspective'或'ortho'當用戶決定在你面前,以與按鍵開關改變視圖。這樣,當他們去改變它時,你可以加載最後保存的矩陣。 –

+1

這是一個好主意,謝謝你,我會嘗試一下! – revelo

回答

0

嘗試使用規模爲你的鄰矩陣的一個更大的範圍內,

//change to ortho 
case 'o': 
    if (perspective) { 
     float min = -pow(10, zoom); 
     float max = pow(10, zoom); 
     projection = glm::ortho(min, max, min, max, -1000.0f, 1000.0f); 
     perspective = false; 
    } 
    break; 

使用相同的代碼,你的時候放大/縮小,或者更好,將其分解爲子程序。另外,請考慮您是否需要zNear和zFar這麼大的範圍。嘗試使用較小的數字。

也許發表您的第一個問題作爲一個單獨的問題

+0

非常感謝你對我的幫助非常大!現在正射放大/縮小工作正常!而對於第一個問題,我將發佈我的代碼,在我的問題帖子中清除緩衝區。 – revelo

+0

好的。請考慮將您的第一個問題作爲單獨問題發佈,並在答案被標記爲已接受的情況下幫助您。 – p10ben

+0

非常感謝您的幫助!我的兩個問題現在都解決了,我在透視縮放和透視模式(案例'p')中導致模型損失的不同值:) – revelo