簡體   English   中英

OpenGL在正交和透視問題之間切換

[英]OpenGL switching between ortho and perspecive problems

我已經將模型集成到OpenGL中並實現了一些鍵盤功能,例如在正視圖和透視圖之間切換。 您也可以放大和縮小並更改攝像機視圖。 現在我認識到的是,在切換到orthografic然后回到視角后,模型會遇到很多問題。 第一個:如果我現在在透視圖中更改水平攝像機視圖,模型會在一段時間后丟失(經常按下攝像機視圖鍵后)。 第二個問題是我無法在正交視圖中放大和縮小。 我試圖擴展我的模型,因為我認為它可能太大但這沒有幫助。 而且我不知道為什么正交函數在透視視圖中創建了這個問題,因為沒有按下正交鍵,一切都在透視視圖中正常工作。

//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(); 
}

我現在也認識到,在從正交視圖切換到透視圖后直接使用攝像機視圖更改時,透視圖中的模型只會丟失。 如果我在更改為透視后再按放大/縮小然后使用相機視圖更改一切正常

嘗試使用更大范圍的尺度為您的ortho矩陣,

//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是否需要如此大的范圍。 嘗試使用較小的數字。

也許將您的第一個問題作為單獨的問題發布

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM