home *** CD-ROM | disk | FTP | other *** search
/ SGI Hot Mix 12 / Silicon_Graphics_Developer_Magic_Soft_Dev_812-8101-012.iso / .all / Showcase / Done / inventor.txt < prev    next >
Encoding:
Text File  |  1995-11-16  |  13.0 KB  |  497 lines

  1.  Main Point for Bullet Slide... 
  2.  
  3.  Silicon Graphics Computer Systems 
  4.  3D Programming 
  5.  for Humans! 
  6.  Open Inventor 3D Toolkit 
  7.  Open Inventor 3D Toolkit 
  8.  ¿ 
  9.  a fast way to write high performance graphics 
  10.  ¿ 
  11.  an object¡oriented approach to 3D graphics 
  12.  ¿ 
  13.  SGI's 3D data format standard 
  14.  ¿ 
  15.  a simple, new paradigm for 3D interaction 
  16.  ¿ 
  17.  an object model above OpenGL 
  18.  ¿ 
  19.  a class lib that you can customize & extend 
  20.  X 
  21.  Open GL 
  22.  Motif Toolkit 
  23.  Inventor Toolkit 
  24.  API 
  25.  SPI 
  26.  API 
  27.  SPI 
  28.  Applications 
  29.  Hardware 
  30.  What is Open Inventor? 
  31.  What is Open Inventor? 
  32.  Major Rewrite! 
  33.  Release 2.1 (Zippy) 
  34.  
  35.  
  36.  è Optimized immediate mode rendering 
  37.  
  38.  caching, scene graph traversal, rendering loops, 
  39.  culling algorithms 
  40.  
  41.  è Reduced memory usage 
  42.  è File read optimizations 
  43.  è Improved picking 
  44.  è VRML support 
  45.  
  46.  anchor and inline nodes recognized 
  47.  New! 
  48.  2 
  49.  RE I Extreme Indy 
  50.  1.5-2x 
  51.  <=2x 
  52.  >1.5x 
  53.  2.5-3x 
  54.  textured 
  55.  Slot Cars! 
  56.  Slot Cars! 
  57.  Release 2.1 (Zippy) 
  58.  - a common 3D data format (cut¡copy¡paste) 
  59.  - a common 3D programming environment 
  60.  - a common 3D look¡and¡feel 
  61.  - 10x better productivity 
  62.  - 10 years of SGI's graphics programming expertise at y 
  63.  our fingertips 
  64.  - focus on solution, not graphics drudgery 
  65.  The Benefits of 
  66.  Open Inventor 
  67.  The Benefits of 
  68.  Open Inventor 
  69.  Powerful 3D Programming Environment 
  70.  Powerful Architecture 
  71.  Open Inventor books 
  72.  from Addison-Wesley 
  73.  Available in Bookstores 
  74.  ¿ 
  75.  Converters available for major file formats 
  76.  to Open Inventor format 
  77.  
  78.  è Alias è SDRC è DXF 
  79.  è 3DS è Wavefront è Intergraph 
  80.  è IGES è SLA è RIB (out) 
  81.  
  82.  è Pro-Engineer è Catia è ComputerVision 
  83.  Open Inventor 
  84.  C++ Reference Manual 
  85.  The Official Reference Document 
  86.  for Open Inventor, Releease 2 
  87.  Open Inventor Architecture Group 
  88.  Josie Wernecke 
  89.  The Inventor Toolmaker 
  90.  Extending Open Inventor, Releease 2 
  91.  Open Inventor Architecture Group 
  92.  Josie Wernecke 
  93.  The Inventor Mentor 
  94.  Programming Object-Oriented 3D 
  95.  Graphics with Open Inventor, Releease 2 
  96.  Open Inventor Architecture Group 
  97.  Josie Wernecke 
  98.  Interoperabliity 
  99.  Interoperability 
  100.  3D Data Exchange 
  101.  ¿ 
  102.  ILM, Princeton, Stanford, Brown, Cambridge, NCSA, Ch 
  103.  rysler, Alias, ... 
  104.  ¿ 
  105.  ILM used Inventor for Jurassic Park and more 
  106.  ¿ 
  107.  Voted Top Ten Graphics S/W Product of 1992* 
  108.  ¿ 
  109.  Indy 
  110.  Out¡of¡Box 
  111.  is Inventor¡based 
  112.  ¿ 
  113.  Explorer, Annotator, Showcase 3D, CASEVision/WorkShop A 
  114.  rray Visualizer, and more 
  115.  ¿ 
  116.  Cartoon Channel's host Moxy Moto 
  117.  ¿ 
  118.  A variety of new apps based on Inventor 
  119.  ¿ 
  120.  Open Inventor licensed to 3rd parties 
  121.  * IEEE Computer Graphics & Applications Jan `93 
  122.  It's Everywhere . . . 
  123.  It's Everywhere . . . 
  124.  Group 
  125.  Perspective 
  126.  Camera 
  127.  Sphere 
  128.  Point 
  129.  Light 
  130.  // Create a scene with a camera 
  131.  
  132.  scene = new SoGroup(); 
  133.  camera = new SoPerspectiveCamera(); 
  134.  scene->addChild( camera ); 
  135.  // Create a light and add to scene 
  136.  light = new SoPointLight(); 
  137.  light->location.setValue( 10, -5, 5 ); 
  138.  scene->addChild( light ); 
  139.  // Create a sphere and add to scene 
  140.  sphere = new SoSphere(); 
  141.  scene->addChild( sphere ); 
  142.  camera->viewAll( scene ) 
  143.  
  144.  Easy 3D Programming 
  145.  Easy 3D Programming 
  146.  Comprehensible, Object Oriented Style 
  147.  dpy = XOpenDisplay(0); 
  148.  vi = glXChooseVisual(dpy, DefaultScreen(dpy), attributeList) 
  149.  ; 
  150.  cx = glXCreateContext(dpy, vi, 0, GL_TRUE); 
  151.  cmap = XCreateColormap(dpy, RootWindow(dpy, 
  152.  vi->screen), 
  153.  vi->visual, AllocNone); 
  154.  swa.colormap = cmap; 
  155.  swa.border_pixel = 0; 
  156.  swa.event_mask = StructureNotifyMask; 
  157.  win = XCreateWindow(dpy, RootWindow(dpy, vi->screen), 
  158.  0, 0, 400, 400, 
  159.  0, vi->depth, InputOutput, 
  160.  vi->visual, 
  161.  
  162.  CWBorderPixel|CWColormap|CWEventMask, &swa); 
  163.  XMapWindow(dpy, win); 
  164.  XIfEvent(dpy, &event, WaitForNotify, (char*)win); 
  165.  glXMakeCurrent(dpy, win, cx); 
  166.  glEnable(GL_DEPTH_TEST); 
  167.  glClearColor(0,0,0,0); 
  168.  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
  169.  SoXtRenderArea ra; 
  170.  ra.show(); 
  171.  3D Programmer 
  172.  Productivity Advantage 
  173.  3D Programmer 
  174.  Productivity Advantage 
  175.  Example: Creating a Rendering Window 
  176.  X and OpenGL 
  177.  Open Inventor 
  178.  Example: Rendering a Textured 3D Object 
  179.  root = new SoSeparator; 
  180.  camera = new SoPerspectiveCamera; 
  181.  light = new SoDirectionalLight; 
  182.  texture = new SoTexture2; 
  183.  cube = new SoCube; 
  184.  
  185.  root->addChild(camera); 
  186.  root->addChild(light); 
  187.  root->addChild(texture); 
  188.  root->addChild(cube); 
  189.  texture->filename = brick.rgb ; 
  190.  ra.setSceneGraph(root); 
  191.  3D Programmer 
  192.  Productivity Advantage 
  193.  3D Programmer 
  194.  Productivity Advantage 
  195.  glTexCoord2fv(tVec); 
  196.  tVec[0]=1;tVec[1]=-1;tVec[2]=1; 
  197.  glVertex3fv(tVec); 
  198.  tVec[0]=0;tVec[1]=1; 
  199.  glTexCoord2fv(tVec); 
  200.  tVec[0]=-1;tVec[1]=-1;tVec[2]=1; 
  201.  glVertex3fv(tVec); 
  202.  glEnd(); 
  203.  glDisable(GL_CULL_FACE); 
  204.  glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0); 
  205.  glDisable(GL_TEXTURE_2D); 
  206.  glDisable(GL_TEXTURE_2D); 
  207.  tVec[0]=0;tVec[1]=0;tVec[2]=0;tVec[3]=1; 
  208.  glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, tVec); 
  209.  glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 
  210.  glDisable(GL_LIGHT0); 
  211.  tMat[0] = 1.000;tMat[1] = 0.000;tMat[2] = 0.000;tMat[3] = 
  212.  0.000; 
  213.  tMat[4] = 0.000;tMat[5] = 1.000;tMat[6] = 0.000;tMat[7] = 
  214.  0.000; 
  215.  tMat[8] = 0.000;tMat[9] = 0.000;tMat[10]= 1.000;tMat[11]= 
  216.  0.000; 
  217.  tMat[12]= 0.000;tMat[13]= 0.000;tMat[14]= 0.000;tMat[15]= 
  218.  1.000; 
  219.  glLoadMatrixf(tMat); 
  220.  glMatrixMode(GL_PROJECTION); 
  221.  tMat[0] = 1.000;tMat[1] = 0.000;tMat[2] = 0.000;tMat[3] = 
  222.  0.000; 
  223.  tMat[4] = 0.000;tMat[5] = 1.000;tMat[6] = 0.000;tMat[7] = 
  224.  0.000; 
  225.  tMat[8] = 0.000;tMat[9] = 0.000;tMat[10]= 1.000;tMat[11]= 
  226.  0.000; 
  227.  tMat[12]= 0.000;tMat[13]= 0.000;tMat[14]= 0.000;tMat[15]= 
  228.  1.000; 
  229.  glLoadMatrixf(tMat); 
  230.  glMatrixMode(GL_MODELVIEW); 
  231.  glDisable(GL_DEPTH_TEST); 
  232.  float tVec[4]; 
  233.  float tMat[16]; 
  234.  /* glGetIntegerv(GL_DEPTH_BITS, ...);*/ 
  235.  glViewport(0, 0, 400, 400); 
  236.  glClearIndex(0); 
  237.  glClear(0x4000); 
  238.  glEnable(GL_DEPTH_TEST); 
  239.  glClear(0x100); 
  240.  glDisable(GL_DEPTH_TEST); 
  241.  /* glGetIntegerv(GL_DEPTH_BITS, ...);*/ 
  242.  glViewport(0, 0, 400, 400); 
  243.  glClearColor(0, 0, 0, 0); 
  244.  glClear(0x4000); 
  245.  glEnable(GL_DEPTH_TEST); 
  246.  glClear(0x100); 
  247.  tVec[0]=0.2;tVec[1]=0.2;tVec[2]=0.2;tVec[3]=1; 
  248.  glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, tVec); 
  249.  tVec[0]=0.8;tVec[1]=0.8;tVec[2]=0.8;tVec[3]=1; 
  250.  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, tVec); 
  251.  glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); 
  252.  tVec[0]=0;tVec[1]=0;tVec[2]=0;tVec[3]=1; 
  253.  glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, tVec); 
  254.  /* glGetBooleanv(GL_RGBA_MODE, ...); */ 
  255.  glEnable(GL_LIGHTING); 
  256.  glDisable(GL_LINE_STIPPLE); 
  257.  glLineWidth(1); 
  258.  glEnable(GL_NORMALIZE); 
  259.  glPointSize(1); 
  260.  glDisable(GL_CULL_FACE); 
  261.  glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0); 
  262.  glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 25.6); 
  263.  tVec[0]=0;tVec[1]=0;tVec[2]=0;tVec[3]=1; 
  264.  glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, tVec); 
  265.  tVec[0]=0;tVec[1]=0;tVec[2]=0;tVec[3]=1; 
  266.  glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, tVec); 
  267.  glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 
  268.  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT) 
  269.  ; 
  270.  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT) 
  271.  ; 
  272.  glDisable(GL_POLYGON_STIPPLE); 
  273.  glDisable(GL_TEXTURE_2D); 
  274.  glDisable(GL_POINT_SMOOTH); 
  275.  glDisable(GL_LINE_SMOOTH); 
  276.  glViewport(0, 0, 400, 400); 
  277.  glScissor(0, 0, 400, 400); 
  278.  glMatrixMode(GL_PROJECTION); 
  279.  tMat[0] = 2.414;tMat[1] = 0.000;tMat[2] = 0.000;tMat[3] = 
  280.  0.000; 
  281.  tMat[4] = 0.000;tMat[5] = 2.414;tMat[6] = 0.000;tMat[7] = 
  282.  0.000; 
  283.  tMat[8] = 0.000;tMat[9] = 0.000;tMat[10]=-2.414;tMat[11]=- 
  284.  1.000; 
  285.  tMat[12]= 0.000;tMat[13]= 0.000;tMat[14]=-8.363;tMat[15]= 
  286.  0.000; 
  287.  glLoadMatrixf(tMat); 
  288.  glMatrixMode(GL_MODELVIEW); 
  289.  tMat[0] = 1.000;tMat[1] = 0.000;tMat[2] = 0.000;tMat[3] = 
  290.  0.000; 
  291.  tMat[4] = 0.000;tMat[5] = 1.000;tMat[6] = 0.000;tMat[7] = 
  292.  0.000; 
  293.  tMat[8] = 0.000;tMat[9] = 0.000;tMat[10]= 1.000;tMat[11]= 
  294.  0.000; 
  295.  tMat[12]= 0.000;tMat[13]= 0.000;tMat[14]=-4.182;tMat[15]= 
  296.  1.000; 
  297.  glLoadMatrixf(tMat); 
  298.  /* glGetIntegerv(GL_MAX_LIGHTS, ...);*/ 
  299.  glEnable(GL_LIGHT0); 
  300.  tVec[0]=0;tVec[1]=0;tVec[2]=0;tVec[3]=1; 
  301.  glLightfv(GL_LIGHT0, GL_AMBIENT, tVec); 
  302.  tVec[0]=1;tVec[1]=1;tVec[2]=1;tVec[3]=1; 
  303.  glLightfv(GL_LIGHT0, GL_DIFFUSE, tVec); 
  304.  tVec[0]=1;tVec[1]=1;tVec[2]=1;tVec[3]=1; 
  305.  glLightfv(GL_LIGHT0, GL_SPECULAR, tVec); 
  306.  tVec[0]=0;tVec[1]=0;tVec[2]=1;tVec[3]=0; 
  307.  glLightfv(GL_LIGHT0, GL_POSITION, tVec); 
  308.  glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 0); 
  309.  glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 180); 
  310.  glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 
  311.  tVec[0]=0;tVec[1]=0;tVec[2]=0;tVec[3]=1; 
  312.  glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, tVec); 
  313.  glEnable(GL_TEXTURE_2D); 
  314.  glGenLists(1); 
  315.  glNewList(1, GL_COMPILE_AND_EXECUTE); 
  316.  glPixelTransferf(GL_RED_SCALE, 1.000000); 
  317.  glPixelTransferf(GL_GREEN_SCALE, 1.000000); 
  318.  glPixelTransferf(GL_BLUE_SCALE, 1.000000); 
  319.  glPixelTransferf(GL_ALPHA_SCALE, 1.000000); 
  320.  glPixelTransferf(GL_RED_BIAS, 0.000000); 
  321.  glPixelTransferf(GL_GREEN_BIAS, 0.000000); 
  322.  glPixelTransferf(GL_BLUE_BIAS, 0.000000); 
  323.  glPixelTransferf(GL_ALPHA_BIAS, 0.000000); 
  324.  { 
  325.  gluBuild2DMipmaps(GL_TEXTURE_2D, 3, 64, 64, GL_RGB, GL_U 
  326.  NSIGNED_BYTE, b); 
  327.  } 
  328.  glEndList(); 
  329.  glFrontFace(GL_CCW); 
  330.  glEnable(GL_CULL_FACE); 
  331.  glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0); 
  332.  tVec[0]=0.8;tVec[1]=0.8;tVec[2]=0.8;tVec[3]=1; 
  333.  glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, tVec); 
  334.  tVec[0]=0.2;tVec[1]=0.2;tVec[2]=0.2;tVec[3]=1; 
  335.  glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, tVec); 
  336.  tVec[0]=0;tVec[1]=0;tVec[2]=0;tVec[3]=1; 
  337.  glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, tVec); 
  338.  tVec[0]=0;tVec[1]=0;tVec[2]=0;tVec[3]=1; 
  339.  glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, tVec); 
  340.  glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 25.6); 
  341.  glBegin(GL_QUADS); 
  342.  tVec[0]=0;tVec[1]=0;tVec[2]=1; 
  343.  glNormal3fv(tVec); 
  344.  tVec[0]=0;tVec[1]=0; 
  345.  glTexCoord2fv(tVec); 
  346.  tVec[0]=-1;tVec[1]=-1;tVec[2]=1; 
  347.  glVertex3fv(tVec); 
  348.  tVec[0]=1;tVec[1]=0; 
  349.  glTexCoord2fv(tVec); 
  350.  tVec[0]=1;tVec[1]=-1;tVec[2]=1; 
  351.  glVertex3fv(tVec); 
  352.  tVec[0]=1;tVec[1]=1; 
  353.  glTexCoord2fv(tVec); 
  354.  tVec[0]=1;tVec[1]=1;tVec[2]=1; 
  355.  glVertex3fv(tVec); 
  356.  tVec[0]=0;tVec[1]=1; 
  357.  glTexCoord2fv(tVec); 
  358.  tVec[0]=-1;tVec[1]=1;tVec[2]=1; 
  359.  glVertex3fv(tVec); 
  360.  tVec[0]=0;tVec[1]=0;tVec[2]=-1; 
  361.  glNormal3fv(tVec); 
  362.  tVec[0]=0;tVec[1]=0; 
  363.  glTexCoord2fv(tVec); 
  364.  tVec[0]=1;tVec[1]=-1;tVec[2]=-1; 
  365.  glVertex3fv(tVec); 
  366.  tVec[0]=1;tVec[1]=0; 
  367.  glTexCoord2fv(tVec); 
  368.  tVec[0]=-1;tVec[1]=-1;tVec[2]=-1; 
  369.  glVertex3fv(tVec); 
  370.  tVec[0]=1;tVec[1]=1; 
  371.  glTexCoord2fv(tVec); 
  372.  tVec[0]=-1;tVec[1]=1;tVec[2]=-1; 
  373.  glVertex3fv(tVec); 
  374.  tVec[0]=0;tVec[1]=1; 
  375.  glTexCoord2fv(tVec); 
  376.  tVec[0]=1;tVec[1]=1;tVec[2]=-1; 
  377.  glVertex3fv(tVec); 
  378.  tVec[0]=-1;tVec[1]=0;tVec[2]=0; 
  379.  glNormal3fv(tVec); 
  380.  tVec[0]=0;tVec[1]=0; 
  381.  glTexCoord2fv(tVec); 
  382.  tVec[0]=-1;tVec[1]=-1;tVec[2]=-1; 
  383.  glVertex3fv(tVec); 
  384.  tVec[0]=1;tVec[1]=0; 
  385.  glTexCoord2fv(tVec); 
  386.  tVec[0]=-1;tVec[1]=-1;tVec[2]=1; 
  387.  glVertex3fv(tVec); 
  388.  tVec[0]=1;tVec[1]=1; 
  389.  glTexCoord2fv(tVec); 
  390.  tVec[0]=-1;tVec[1]=1;tVec[2]=1; 
  391.  glVertex3fv(tVec); 
  392.  tVec[0]=0;tVec[1]=1; 
  393.  glTexCoord2fv(tVec); 
  394.  tVec[0]=-1;tVec[1]=1;tVec[2]=-1; 
  395.  glVertex3fv(tVec); 
  396.  tVec[0]=1;tVec[1]=0;tVec[2]=0; 
  397.  glNormal3fv(tVec); 
  398.  tVec[0]=0;tVec[1]=0; 
  399.  glTexCoord2fv(tVec); 
  400.  tVec[0]=1;tVec[1]=-1;tVec[2]=1; 
  401.  glVertex3fv(tVec); 
  402.  tVec[0]=1;tVec[1]=0; 
  403.  glTexCoord2fv(tVec); 
  404.  tVec[0]=1;tVec[1]=-1;tVec[2]=-1; 
  405.  glVertex3fv(tVec); 
  406.  tVec[0]=1;tVec[1]=1; 
  407.  glTexCoord2fv(tVec); 
  408.  tVec[0]=1;tVec[1]=1;tVec[2]=-1; 
  409.  glVertex3fv(tVec); 
  410.  tVec[0]=0;tVec[1]=1; 
  411.  glTexCoord2fv(tVec); 
  412.  tVec[0]=1;tVec[1]=1;tVec[2]=1; 
  413.  glVertex3fv(tVec); 
  414.  tVec[0]=0;tVec[1]=1;tVec[2]=0; 
  415.  glNormal3fv(tVec); 
  416.  tVec[0]=0;tVec[1]=0; 
  417.  glTexCoord2fv(tVec); 
  418.  tVec[0]=-1;tVec[1]=1;tVec[2]=1; 
  419.  glVertex3fv(tVec); 
  420.  tVec[0]=1;tVec[1]=0; 
  421.  glTexCoord2fv(tVec); 
  422.  tVec[0]=1;tVec[1]=1;tVec[2]=1; 
  423.  glVertex3fv(tVec); 
  424.  tVec[0]=1;tVec[1]=1; 
  425.  glTexCoord2fv(tVec); 
  426.  tVec[0]=1;tVec[1]=1;tVec[2]=-1; 
  427.  glVertex3fv(tVec); 
  428.  tVec[0]=0;tVec[1]=1; 
  429.  glTexCoord2fv(tVec); 
  430.  tVec[0]=-1;tVec[1]=1;tVec[2]=-1; 
  431.  glVertex3fv(tVec); 
  432.  tVec[0]=0;tVec[1]=-1;tVec[2]=0; 
  433.  glNormal3fv(tVec); 
  434.  tVec[0]=0;tVec[1]=0; 
  435.  glTexCoord2fv(tVec); 
  436.  tVec[0]=-1;tVec[1]=-1;tVec[2]=-1; 
  437.  glVertex3fv(tVec); 
  438.  tVec[0]=1;tVec[1]=0; 
  439.  glTexCoord2fv(tVec); 
  440.  tVec[0]=1;tVec[1]=-1;tVec[2]=-1; 
  441.  glVertex3fv(tVec); 
  442.  tVec[0]=1;tVec[1]=1; 
  443.  OpenGL 
  444.  Open Inventor 
  445.  ¿ 
  446.  Automatic caching yields OpenGL rates 
  447.  ¿ 
  448.  Objects are tuned for OpenGL 
  449.  ¿ 
  450.  Culling and level¡of¡detail can pay off 
  451.  ¿ 
  452.  Viewers include degradation options 
  453.  ¿ 
  454.  Picking uses bounding boxes 
  455.  ¿ 
  456.  Fast manipulators 
  457.  Performance Features 
  458.  Performance Features 
  459.  ¿ 
  460.  Shapes 
  461.  Cubes, Cones, Cylinders, Surfaces, 3D Text 
  462.  ¿ 
  463.  Properties 
  464.  Color, Materials, Textures, Transparency 
  465.  ¿ 
  466.  Lights & Cameras 
  467.  Point, Directional & Spot Lights 
  468.  ¿ 
  469.  Manipulators 
  470.  Trackball, Handlebox, Transform 
  471.  ¿ 
  472.  Actions 
  473.  Render, Pick, Print, Write 
  474.  ¿ 
  475.  Components 
  476.  Editors, Viewers, Browsers, Sliders and Buttons 
  477.  
  478.  Nodes-R-Us . . . 
  479.  Toolkit Components 
  480.  Nodes-R-Us . . . 
  481.  Toolkit Components 
  482.  ¿ 
  483.  Objects, not drawings! 
  484.  - picking, files, bounding boxes, searches,... 
  485.  ¿ 
  486.  Direct 3D manipulation 
  487.  ¿ 
  488.  Open Inventor objects call OpenGL 
  489.  ¿ 
  490.  Caching == speed 
  491.  ¿ 
  492.  Subclassing is a good thing 
  493.  Important Concepts 
  494.  to Remember 
  495.  Important Concepts 
  496.  to Remember 
  497.