2014-07-25 7 views
2

다음과 같은 결과가 나오는 이유는 다음과 같습니다. enter image description hereGLFW 창이 너무 느린 이유는 무엇입니까?

각 프레임을 렌더링하는 데 왜 두 번째 또는 두 시간이 걸리는 지 알 수 없습니다. 코드가 정상적인 것 같지만 왜 그렇게 천천히 렌더링하는지 모르겠습니다.

#define GLFW_INCLUDE_GLU 
#define GLEW_STATIC 
#include"GL/glew.c" 
#include"GLFW/glfw3.h" 
#include<cmath> 
#include<ctime> 
#include<stdlib.h> 
using namespace std; 

int main() { 
    // init glfw 
    if (!glfwInit()) return 0; 

    // create window and set active context 
    GLFWwindow* window = glfwCreateWindow(640, 480, "Test", NULL, NULL); 
    glfwMakeContextCurrent(window); 

    // init glew 
    if (glewInit() != GLEW_OK) return 0; 

    // set swap interval 
    glfwSwapInterval(1); 

    // render loop 
    while (!glfwWindowShouldClose(window)) { 
     srand(time(NULL)); 
     float r = (rand() % 100)/100.0; 

     float ratio; 
     int width, height; 
     glfwGetFramebufferSize(window, &width, &height); 
     ratio = width/(float) height; 
     glViewport(0, 0, width, height); 

     // render 
     glClear(GL_COLOR_BUFFER_BIT); 
     glClearColor(r, 0, 0, 1); 

     // swap 
     glfwSwapBuffers(window); 

     // events 
     glfwPollEvents(); 
    } 

    // terminate glfw 
    glfwTerminate(); 

    return 0; 
} 

답변

5

귀하의 GLFW 코드는 정확하며 생각보다 훨씬 빠르게 수행됩니다.

randsrand의 잘못된 사용법입니다. 보다 구체적으로 렌더링 할 때마다 현재 시간 (초 단위로 측정)을 srand으로 설정하면 동일한 초에서 매번 r에 대해 정확히 같은 값을 생성합니다.

따라서 같은 색으로 화면을 초당 수백 번 지울 수 있습니다. 이 처럼 보이지만 초당 한 프레임 만 렌더링합니다. 그러나 실제로는 아닙니다.

rand()%100을 사용하여 바이어스 된 배포판을 제공하고 일부 OpenGL 명령을 중복 사용하는 것과 같은 코드에 몇 가지 다른 문제가 있습니다. 즉각적인 문제를 해결해야하는 것은 다음과 같습니다. srand 한 번만, 렌더링 할 때마다가 아닙니다.

+0

도움을 주셔서 대단히 감사합니다. – cj1094

+0

'rand'와 함께 모듈러스를 사용하는 것에 대해서는'r = (rand() % 100) /100.0;과'r = (rand() % 256) /255.0;'의 차이점을 고려하십시오. 'rand()'가 1, 101, 201의 값을 반환하면'r'은 어떻게됩니까? 두 경우를 비교하십시오. 2가 아닌 수를 모듈로 지정하면 일부 출력이 다른 출력보다 2-3 배 자주 표시됩니다. 숫자가 등분 할 경우 매우 혼란 스러울 수 있습니다. – Damon

관련 문제