我已經將模型集成到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();
}
我現在也認識到,在從正視圖切換到透視圖後直接使用相機視圖更改時,透視圖中的模型纔會丟失。如果我先按下放大/縮小改變透視,然後用攝像機視圖後改變了一切工作正常
這可能有助於節省您的矩陣的狀態兩種類型'perspective'或'ortho'當用戶決定在你面前,以與按鍵開關改變視圖。這樣,當他們去改變它時,你可以加載最後保存的矩陣。 –
這是一個好主意,謝謝你,我會嘗試一下! – revelo