2016-07-21 116 views
0

我在使用glOrtho移動攝像頭時遇到問題。我在中心有一個小四邊形,我想嘗試用glOrtho移動相機,但它似乎不工作。四方根本不移動,所以相機不會移動我猜。也許我想念明白glOrtho是如何工作的? 這是我的代碼到目前爲止。使用glOrtho移動攝像頭

void Camera::updateCamera(float x, float y, float zoom) 
{ 
    camX = x; 
    camY = y; 
    this->zoom = zoom; 
    viewWidth = 320; 
    viewHeight = 240; 
    //viewWidth = tan(60) * this->zoom; 
    //viewHeight = tan(45) * this->zoom;  
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(camX - viewWidth, 
     camX + viewWidth, 
     camY - viewHeight, 
     camY + viewHeight, 
     -1, 
     1); 
    glMatrixMode(GL_MODELVIEW); 
} 

這裏是我應用它的地方。我試着將它沿x軸移動25分。

void Engine::renderAll() 
{ 
    x += 25; 
    glClear(GL_COLOR_BUFFER_BIT); 
    shader->use(); 
    camera.updateCamera(x, y, 1.0); 
    //shader->setUniform4fv("view", camera.getView()); 
    batchManager->renderBatches(); 
    SDL_GL_SwapWindow(window); 
} 
+0

您的着色器實際上是否使用投影矩陣? –

回答

0

是的,我猜你誤解了glOrtho的工作原理。 glOrtho的作用是使用正交投影在2D視圖中轉換3D視圖。

如果您想在3D空間中使用定位相機,則正確的功能通常稱爲LookAt。有一次,看來我使用的是舊版OpenGL,你可以試試glu功能gluLookAt

PS。在moderm openGL中,現在不推薦使用這個函數。我建議你嘗試學習現代的方式。

+0

哦,我忘了提及,我在2D工作,這就是爲什麼我試圖使用glOrtho。 – GroniumArgor

+0

不成問題。 OpenGL是一個3D庫/框架。只需保持一個維度不變 – Amadeus

+0

因此,我無法使用glOrtho作爲我的相機? – GroniumArgor