[英]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.