⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fractals.cxx

📁 PIXIL is a small footprint operating environment, complete with PDA PIM applications, a browser and
💻 CXX
📖 第 1 页 / 共 2 页
字号:
 /*  * draw and build display list for tree  */void CreateTree(void){  srand48(TreeSeed);  glNewList(TREE, GL_COMPILE);    glPushMatrix();    glPushAttrib(GL_LIGHTING_BIT);    glCallList(TREE_MAT);    glTranslatef(0, -1, 0);    FractalTree(0);    glPopAttrib();    glPopMatrix();  glEndList();  } /*  * new seed for a new tree (groan)  */void NewTree(void){  TreeSeed = time(NULL);}/***************************************************************//*********************** FRACTAL PLANET ************************//***************************************************************/void CreateIsland(void){  cutoff = .06;  CreateMountain();  cutoff = -1;  glNewList(ISLAND, GL_COMPILE);  glPushAttrib(GL_LIGHTING_BIT);  glMatrixMode(GL_MODELVIEW);  glPushMatrix();    glCallList(WATER_MAT);    glBegin(GL_QUADS);      glNormal3f(0, 1, 0);      glVertex3f(10, 0.01, 10);      glVertex3f(10, 0.01, -10);      glVertex3f(-10, 0.01, -10);      glVertex3f(-10, 0.01, 10);    glEnd();    glPushMatrix();    glTranslatef(0, -0.1, 0);    glCallList(MOUNTAIN);    glPopMatrix();    glPushMatrix();    glRotatef(135, 0, 1, 0);    glTranslatef(0.2, -0.15, -0.4);    glCallList(MOUNTAIN);    glPopMatrix();    glPushMatrix();    glRotatef(-60, 0, 1, 0);    glTranslatef(0.7, -0.07, 0.5);    glCallList(MOUNTAIN);    glPopMatrix();    glPushMatrix();    glRotatef(-175, 0, 1, 0);    glTranslatef(-0.7, -0.05, -0.5);    glCallList(MOUNTAIN);    glPopMatrix();    glPushMatrix();    glRotatef(165, 0, 1, 0);    glTranslatef(-0.9, -0.12, 0.0);    glCallList(MOUNTAIN);    glPopMatrix();  glPopMatrix();  glPopAttrib();  glEndList();  }void NewFractals(void){  NewMountain();  NewTree();}void Create(int fract){  switch(fract) {    case MOUNTAIN:      CreateMountain();      break;    case TREE:      CreateTree();      break;    case ISLAND:      CreateIsland();      break;  }}/***************************************************************//**************************** OPENGL ***************************//***************************************************************/void SetupMaterials(void){  GLfloat mtn_ambuse[] =   { 0.426, 0.256, 0.108, 1.0 };  GLfloat mtn_specular[] = { 0.394, 0.272, 0.167, 1.0 };  GLfloat mtn_shininess[] = { 10 };  GLfloat water_ambuse[] =   { 0.0, 0.1, 0.5, 1.0 };  GLfloat water_specular[] = { 0.0, 0.1, 0.5, 1.0 };  GLfloat water_shininess[] = { 10 };  GLfloat tree_ambuse[] =   { 0.4, 0.25, 0.1, 1.0 };  GLfloat tree_specular[] = { 0.0, 0.0, 0.0, 1.0 };  GLfloat tree_shininess[] = { 0 };  GLfloat leaf_ambuse[] =   { 0.0, 0.8, 0.0, 1.0 };  GLfloat leaf_specular[] = { 0.0, 0.8, 0.0, 1.0 };  GLfloat leaf_shininess[] = { 10 };  glNewList(MOUNTAIN_MAT, GL_COMPILE);    glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mtn_ambuse);    glMaterialfv(GL_FRONT, GL_SPECULAR, mtn_specular);    glMaterialfv(GL_FRONT, GL_SHININESS, mtn_shininess);  glEndList();  glNewList(WATER_MAT, GL_COMPILE);    glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, water_ambuse);    glMaterialfv(GL_FRONT, GL_SPECULAR, water_specular);    glMaterialfv(GL_FRONT, GL_SHININESS, water_shininess);  glEndList();  glNewList(TREE_MAT, GL_COMPILE);    glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, tree_ambuse);    glMaterialfv(GL_FRONT, GL_SPECULAR, tree_specular);    glMaterialfv(GL_FRONT, GL_SHININESS, tree_shininess);  glEndList();  glNewList(LEAF_MAT, GL_COMPILE);    glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, leaf_ambuse);    glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, leaf_specular);    glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, leaf_shininess);  glEndList();}void myGLInit(void){  GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 };  GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };  GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 };  GLfloat light_position[] = { 0.0, 0.3, 0.3, 0.0 };  GLfloat lmodel_ambient[] = { 0.4, 0.4, 0.4, 1.0 };  glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);  glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);  glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);  glLightfv(GL_LIGHT0, GL_POSITION, light_position);      glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);  glEnable(GL_LIGHTING);  glEnable(GL_LIGHT0);  glDepthFunc(GL_LEQUAL);  glEnable(GL_DEPTH_TEST);  glEnable(GL_NORMALIZE);#if 0  glEnable(GL_CULL_FACE);  glCullFace(GL_BACK);#endif  glShadeModel(GL_SMOOTH);#if 0  glEnable(GL_BLEND);  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);#endif  SetupMaterials();  CreateTreeLists();  glFlush();} /***************************************************************//************************ GLUT STUFF ***************************//***************************************************************/void reshape(int w, int h){  glViewport(0,0,w,h);  glMatrixMode(GL_PROJECTION);  glLoadIdentity();  gluPerspective(60.0, (GLdouble)w/h, 0.01, 100);  glPushMatrix();  glMatrixMode(GL_MODELVIEW);  glFlush();}void display(void){   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  glFlush();  glMatrixMode(GL_PROJECTION);  glPopMatrix();  glPushMatrix();  /* clear of last viewing xform, leaving perspective */  agvViewTransform();  glMatrixMode(GL_MODELVIEW);  glLoadIdentity();  if (Rebuild) {    Create(Fract);    Rebuild = 0;  }  glCallList(Fract);  if (DrawAxes)    glCallList(AXES);  glutSwapBuffers();  glFlush();}void visible(int v){  if (v == GLUT_VISIBLE)    agvSetAllowIdle(1);  else {    glutIdleFunc(NULL);    agvSetAllowIdle(0);  }}void menuuse(int v){  if (v == GLUT_MENU_NOT_IN_USE)    agvSetAllowIdle(1);  else {    glutIdleFunc(NULL);    agvSetAllowIdle(0);  }}/***************************************************************//******************* MENU SETUP & HANDLING *********************//***************************************************************/typedef enum { MENU_QUIT, MENU_RAND, MENU_MOVE, MENU_AXES } MenuChoices;void setlevel(int value){  Level = value;  Rebuild = 1;  glutPostRedisplay();}void choosefract(int value){  Fract = value;  Rebuild = 1;  glutPostRedisplay();}void handlemenu(int value){  switch (value) {    case MENU_QUIT:      exit(0);      break;    case MENU_RAND:      NewFractals();      Rebuild = 1;      glutPostRedisplay();      break;    case MENU_AXES:      DrawAxes = !DrawAxes;      glutPostRedisplay();      break;    }}void MenuInit(void){  int submenu3, submenu2, submenu1;  submenu1 = glutCreateMenu(setlevel);  glutAddMenuEntry("0", 0);  glutAddMenuEntry("1", 1);  glutAddMenuEntry("2", 2);  glutAddMenuEntry("3", 3);  glutAddMenuEntry("4", 4);  glutAddMenuEntry("5", 5);  glutAddMenuEntry("6", 6);  glutAddMenuEntry("7", 7);  glutAddMenuEntry("8", 8);  submenu2 = glutCreateMenu(choosefract);  glutAddMenuEntry("Moutain", MOUNTAIN);  glutAddMenuEntry("Tree", TREE);  glutAddMenuEntry("Island", ISLAND);  submenu3 = glutCreateMenu(agvSwitchMoveMode);  glutAddMenuEntry("Flying", FLYING);  glutAddMenuEntry("Polar", POLAR);  glutCreateMenu(handlemenu);  glutAddSubMenu("Level", submenu1);  glutAddSubMenu("Fractal", submenu2);  glutAddSubMenu("Movement", submenu3);  glutAddMenuEntry("New Fractal",      MENU_RAND);  glutAddMenuEntry("Toggle Axes", MENU_AXES);  glutAddMenuEntry("Quit",             MENU_QUIT);  glutAttachMenu(GLUT_RIGHT_BUTTON);}/***************************************************************//**************************** MAIN *****************************//***************************************************************/// fltk-style callbacks to Glut menu callback translators:void setlevel(Fl_Widget*, void *value) {setlevel(long(value));}void choosefract(Fl_Widget*, void *value) {choosefract(long(value));}void handlemenu(Fl_Widget*, void *value) {handlemenu(long(value));}#include <FL/Fl_Button.H>#include <FL/Fl_Group.H>#include <FL/Fl_Window.H>int main(int argc, char** argv){//  glutInit(&argc, argv); // this line removed for fltk  // create fltk window:  Fl_Window window(512+20, 512+100);  window.resizable(window);  // create a bunch of buttons:  Fl_Group *g = new Fl_Group(110,50,400-110,30,"Level:");  g->align(FL_ALIGN_LEFT);  g->begin();  Fl_Button *b;  b = new Fl_Button(110,50,30,30,"0"); b->callback(setlevel,(void*)0);  b = new Fl_Button(140,50,30,30,"1"); b->callback(setlevel,(void*)1);  b = new Fl_Button(170,50,30,30,"2"); b->callback(setlevel,(void*)2);  b = new Fl_Button(200,50,30,30,"3"); b->callback(setlevel,(void*)3);  b = new Fl_Button(230,50,30,30,"4"); b->callback(setlevel,(void*)4);  b = new Fl_Button(260,50,30,30,"5"); b->callback(setlevel,(void*)5);  b = new Fl_Button(290,50,30,30,"6"); b->callback(setlevel,(void*)6);  b = new Fl_Button(320,50,30,30,"7"); b->callback(setlevel,(void*)7);  b = new Fl_Button(350,50,30,30,"8"); b->callback(setlevel,(void*)8);  g->end();  b = new Fl_Button(400,50,100,30,"New Fractal"); b->callback(handlemenu,(void*)MENU_RAND);    b = new Fl_Button( 10,10,100,30,"Mountain"); b->callback(choosefract,(void*)MOUNTAIN);  b = new Fl_Button(110,10,100,30,"Tree"); b->callback(choosefract,(void*)TREE);  b = new Fl_Button(210,10,100,30,"Island"); b->callback(choosefract,(void*)ISLAND);  b = new Fl_Button(400,10,100,30,"Quit"); b->callback(handlemenu,(void*)MENU_QUIT);  window.show(argc,argv); // glut will die unless parent window visible  window.begin(); // this will cause Glut window to be a child  glutInitWindowSize(512, 512);  glutInitWindowPosition(10,90); // place it inside parent window  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_MULTISAMPLE);  glutCreateWindow("Fractal Planet?");  window.end();  window.resizable(glut_window);  agvInit(1); /* 1 cause we don't have our own idle */  glutReshapeFunc(reshape);  glutDisplayFunc(display);  glutVisibilityFunc(visible);  glutMenuStateFunc(menuuse);  NewFractals();  agvMakeAxesList(AXES);  myGLInit();   MenuInit();  glutMainLoop(); // you could use Fl::run() instead  return 0;}#endif//// End of "$Id: fractals.cxx,v 1.1.1.1 2003/08/07 21:18:42 jasonk Exp $".//

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -