2015-04-06 43 views
0

我正在为学校的小程序工作。它包括一个3D犯罪现场(我使用OpenGL来显示它),一些说明和一个主菜单。但是,我面临着一个不必要的问题。

我遇到的问题如下:当我运行程序时,它具有所需的窗口大小(屏幕宽度* 0.85);但是,当程序进入主循环时,它会缩小。

奇怪的是,纵横比看似不会改变,只是窗口大小。

这里是我的主循环:
SDL_Window不必要地调整大小

while (!quit) { 
     if (mainMenu) { 
      SDL_UpdateWindowSurface(mainWindow); 
      SDL::keyTesting(); 

      menuImage->drawImage(mainSurface); 

      instructionButton->drawButton(mainSurface); 
      crimeButton->drawButton(mainSurface); 

      SDL_Delay(10); 
     } 
     else if (instructions) { 
      SDL_UpdateWindowSurface(mainWindow); 
      SDL::keyTesting(); 

      instructionsImage->drawImage(mainSurface); 

      backButton->drawButton(mainSurface); 

      SDL_Delay(10); 
     } 
     else if(modelView) { 
      for (int i = 0; i < 100; i++) 
       SDL::keyTesting(); 

      GLfloat currentFrame = glfwGetTime(); 
      deltaTime = currentFrame - lastFrame; 
      lastFrame = currentFrame; 

      glClearColor(0.2f, 0.2f, 0.2f, 1.0f); 
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

      glUseProgram(modelProgram); 

      glUniform3f(viewPosLoc, camera.Position.x, camera.Position.y, camera.Position.z); 

      glm::mat4 projection = glm::perspective(camera.Zoom, (float)windowWidth/(float)windowHeight, 0.1f, 250.0f); 
      glm::mat4 view = camera.GetViewMatrix(); 
      glUniformMatrix4fv(projLoc, 1, GL_FALSE, glm::value_ptr(projection)); 
      glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view)); 

      glm::mat4 modelMat; 
      modelMat = glm::translate(modelMat, glm::vec3(0.0f, -1.75f, 0.0f)); 
      modelMat = glm::scale(modelMat, glm::vec3(1.5f, 1.5f, 1.5f)); 
      glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(modelMat)); 

      model->Draw(modelProgram); 

      SDL_GL_SwapWindow(mainWindow); 
     } 
    } 
+1

看起来您正在将SDL渲染与OpenGL混合使用。通常情况下,这很糟糕,OpenGL与其他渲染效果不佳。如果您使用的是OpenGL,那么只需使用它即可。这可能(但不是确定的),这是干扰窗口。 – Zammalad

回答

2

尝试使用SDL_WINDOW_SHOWN标志。