2014-04-19 2 views
1
설정

내가 가지고있는 만델 브로는 OpenGL을 사용하기 위해 C++ 코드를 설정하지만 색상이 원하는 색상이며, 정확하지 않은 다음 enter image description here나쁜 색은 C++ 및 OpenGL을

하지만이 얻을 : 를 enter image description here

int vala = 600; 
int valb = 600; 
//render one frame 
void Application::render(void) 
{ 
    // Clear the window and the depth buffer 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    //render grid 

    Image img(vala, valb); 
    double MinRe = -2.0; 
    double MaxRe = 1.0; 
    double MinIm = -1.2; 
    double MaxIm = MinIm+(MaxRe-MinRe)*vala/valb; 
    double Re_factor = (MaxRe-MinRe)/(vala-1); 
    double Im_factor = (MaxIm-MinIm)/(valb-1); 
    unsigned MaxIterations = 250; 
    for(unsigned int y = 0; y < img.height; y++){ 
     double c_im = MaxIm - y*Im_factor; 
     for(unsigned x=0; x< img.width; ++x){ 
      double c_re = MinRe + x*Re_factor; 
      double Z_re = c_re, Z_im = c_im; 
      bool isInside = true; 
      for(unsigned n=0; n<MaxIterations; ++n){ 

       double Z_re2 = Z_re*Z_re, Z_im2 = Z_im*Z_im; 
       if(Z_re2 + Z_im2 > 4) 
       { 
        isInside = false; 
        break; 
       } 

       Z_im = 2*Z_re*Z_im + c_im; 
       Z_re = Z_re2 - Z_im2 + c_re; 


       double z = sqrt(Z_re*Z_re + Z_im*Z_im); 
       int brightness = 256. *log(1.75 + n - log(log(z))); 
       img.setPixel(x,y, Color(sin(time)*brightness, sin(time/2)*brightness, brightness)); 



      } 


      } 

     } 


    img.scale(this->window_width, this->window_height); 

    renderImage(&img); 

    //swap between front buffer and back buffer 
    SDL_GL_SwapWindow(this->window); 
} 

왜 이런 일이 발생하고 어떻게 수정해야하는지 알 수 있습니다.

대단히 감사합니다.

+1

'glClear (...)'이외에 여기에는 GL 코드가 하나도 없습니다. 나는'Image' 또는'renderImage (...) '의 구현이 책임이 있다고 생각하지만 그것들은 보여지지 않습니다. GL이 아닌 이미지 파일에 직접 출력하는 경우 아무 것도 변경됩니까? –

+0

@ AndonM.Coleman 많은 OpenGL 코드가 아닐 수도 있지만 프로그램의 나머지 부분에는 많은 행의 openGL 코드가 포함되어 있으므로 프로그램 자체가 100 % OpenGL을 지원해야합니다. Image 및 renderImage는 문제가되지 않습니다. 문제는 색상을 인쇄하는 방정식에서 비롯됩니다 ... – Gera

+0

아, 알겠습니다. 나는 맨 위의 이미지가이 코드를 사용하여 생성되었고 그 이미지가 GL로 표시하려고 시도한 결과 인 것처럼 질문을 해석했다. –

답변

0

루프 내에서 색상을 설정했는데, 이는 내가 본 만델 브로 코드와 다릅니다. 또한 동일한 픽셀의 색상을 여러 번 설정하므로 매우 비효율적입니다. 논리 문제의 또 다른 측면은 isInside을 설정했지만 절대로 사용하지 않는 것입니다.

일반적인 방법은 루프가 종료 된 후에 색상을 설정하는 것입니다. isInside이 참이면 색을 검은 색으로 설정합니다 (또는 이미지가 검은 색으로 지워지면 손대지 마십시오). 그렇지 않으면 색상을 설정합니다. origin of the code you use을 보면 반복 횟수를 기준으로 "외부"케이스의 색상을 결정할 것을 제안합니다.이 경우 반복되는 숫자는 n입니다. 귀하가 올린 코드는 Z_re/Z_im 값을 사용하여 색상을 결정합니다.

편집 : 좋습니다, 수식은 nZ_re/Z_im을 모두 사용합니다. 어쨌든, 레퍼런스 이미지에 사용 된 포럼이 무엇인지 정확히 알지 못한다면, 같은 이미지를 사용하면 정확하게 같은 색을 기대할 수 없다. 내가 위에서 지적한 것을 고치면 적어도 내부를 검게해야합니다.