interface


  EXTERNPROTO asphere [
     field SFInt32 nlatitude
     field SFInt32 nlongitude
     field SFFloat creaseAngle
  ]
  {
     DEF IFS IndexedFaceSet {
        coord DEF C Coordinate { }
        texCoord DEF TC TextureCoordinate { }
        creaseAngle IS creaseAngle
     }
     
     DEF S Script {
        field SFInt32 nlat
        field SFInt32 nl
        ##eventOut MFVec3f c
        eventOut MFVec3f c
        eventOut MFVec2f tc
        eventOut MFInt32 ci
        url [
           "javascript:
           function initialize() {
              var r, phi, x, y, z;
              var i, j, idx;
              // Compute coordinates, texture coordinates:
              for (i = 0; i < nlat; i++) {
                 //y = 2 * ( i / (nlat-1) ) - 1;
                 y = 2 * ( i / (nlat-1) ) - 1;
                 r = Math.sqrt( 1 - y*y );
                 for (j = 0; j < nl; j++) {
                    phi = 2 * Math.PI * j / nl;
                    x = -Math.sin(phi)*r;
                    z = -Math.cos(phi)*r;
                    c[i*nl+j] = new SFVec3f(x,y,z);
                    tc[i*nl+j] = new SFVec2f( j/nl, i/(nlat-1) );
                 }
              }
              // And compute indices:
              for (i = 0; i < nlat-1; i++) {
                 for (j = 0; j < nl; j++) {
                    idx = 5*(i*nl+j);
                    ci[idx+0] = i*nl+j;
                    ci[idx+1] = i*nl+(j+1)\%nl;
                    ci[idx+2] = (i+1)*nl+(j+1)\%nl;
                    ci[idx+3] = (i+1)*nl+j;
                    ci[idx+4] = -1;  // end-of-polygon
                 }
              }
           }"
        ]
     }
     ROUTE S.c TO C.set_point
     ROUTE S.tc TO TC.set_point
     ROUTE S.ci TO IFS.set_coordIndex
  }
  
   Background { skyColor [0.9 .1 .1] }
   NavigationInfo { type ["EXAMINE", "ANY"] }
   Viewpoint { 
       position 0 0 10
       orientation 0 0 1 0
    }
  
  Transform {
       translation 0 0 0
       scale 2 2 2
       children [
          Shape {
             appearance DEF A Appearance {
                material Material {}
                ##texture ImageTexture { url ["local/images/check.gif"] }
                texture ImageTexture { url ["@vr.jpg"] }
             }
             ##geometry asphere { nlatitude 32 nlongitude 20 }
             geometry asphere { nlatitude 100 nlongitude 100 }
          }
       ]
    }