2016-07-21 73 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