首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >opengl --如何调用函数并从头开始绘制(从菜单选项)

opengl --如何调用函数并从头开始绘制(从菜单选项)
EN

Stack Overflow用户
提问于 2011-04-19 11:32:27
回答 1查看 3.2K关注 0票数 0

我有下面的代码,它绘制了mandelbrot集。我创建了一个带有“黑白”选项的菜单,我希望将mandelbrot绘制为黑白颜色。我还没有想好如何做到这一点(如果可以这样做的话)通过display函数调用.mandelbrot,但我如何调用mandelbrot_black?

另外,如果有人知道如何在我的code...here中进行“缩放”...http://stackoverflow.com/questions/5705554/how-to-do-zoom-in-my-code-mandelbrot

代码语言:javascript
运行
AI代码解释
复制
 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();
    }




   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;
      }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-19 11:41:40

您的显示函数需要根据当前状态(可以/应该是全局变量)绘制mandelbrot()或mandelbrot_black()。

代码语言:javascript
运行
AI代码解释
复制
//in global scope
static bool black = false;
   ...

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

mymenu()中相应地更改black。您仍然需要将菜单附加到鼠标按钮并调用SetupMenu()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5715683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档