开发者

opengl -- how to call a function and draw it from the beginning (from menu option)

i have the following code ,which draws mandelbrot set.I created a menu with an option "black&white" which i want to draw the mandelbrot in black and white color.I haven't figured how to do this (if it can be done this way).mandelbrot is called through the display function ,but how can i call mandelbrot_black?

Also, if someone knows hot to make "zoom" in my code...here...http://stackoverflow.com/questions/5705554/how-to-do-zoom-in-my-code-mandelbrot

 void mandelbrot();     
 void mandelbrot_black();

 GLsizei width = 600;
 GLsizei height = 600; 
 GLfloat AspectRatio;
 int max = 500;
 double xpos=0,ypos=0;
 int CLEARFLAG=1;


  double xmax = 2.0;
  double xmin = -2.0; 
  double ymax = 2.0;
  double ymin = -2.0;

  using namespace std;

  void display()
 {
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
  gluOrtho2D(-2, width, -2, height);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
  glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT );
  mandelbrot();
  glutSwapBuffers();
  }


  void reshape(GLsizei w, GLsizei h) {

  width=w; height=h;
  glViewport(0,0,width,height);
  glutPostRedisplay();
   }



  void setXYpos(int px, int py)
    {  
     xpos=xmin+(xmax-xmin)*px/width;
     ypos=ymax-(ymax-ymin)*py/height;

     }



   void mouse(int button, int state, int x, int y)
  {
if(button==GLUT_LEFT_BUTTON && state==GLUT_DOWN) {CLEARFLAG=0; setXYpos(x,y);}

glutPostRedisplay();
  }

void mandelbrot()
 {
 ...}

void mandelbrot_black(){
...}

void mymenu(int n)
{
  switch(n) {

   case 1: zoom_in();break;
   case 2: zoom_out();break;
   case 3: mandelbrot_black();break;
   case 4: exit(0);
     }

   glutPostRedisplay();
    }

开发者_StackOverflow中文版


   void SetupMenu()
   {

glutCreateMenu(mymenu);
glutAddMenuEntry("zoom in",1);
glutAddMenuEntry("zoom out",2);
glutAddMenuEntry("black&white",3);
glutAddMenuEntry("exit",4);
glutAttachMenu(GLUT_RIGHT_BUTTON);
    } 

     int main(int argc, char *argv[])
     {

     glutInit(&argc, argv);
     glutInitWindowSize(600, 600);
     glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
     glutCreateWindow("Mandelbrot");
     glutDisplayFunc(display);
     glutReshapeFunc(reshape);
     glutMainLoop();

     return 0;
      }


Your display function needs to draw either mandelbrot() or mandelbrot_black() depending on the current state (which can/should be a global variable).

//in global scope
static bool black = false;
   ...

//in display()
if(black)
  mandelbrot_black();
else
  mandelbrot();

Change black accordingly in mymenu(). You still need to attach your menu to a mouse button and call SetupMenu().

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜