Project-VolVisWeb

initTextures()

Wo wird diese Funktion zuerst aufrufen? Später auch hier.

   function initTextures()
   {
      var planeActivated;
      var fileFormat = ".png";

      texDir = link.substr(link.lastIndexOf("/")+1);
      numberOfSlices = texDir.substring(0, texDir.indexOf("_"));

      planeImage = new Array(3*numberOfSlices);
      planeTexture = new Array(3*numberOfSlices);

      imagesToLoad = 3*numberOfSlices;
      imagesLoaded = false;

      var index = 0;

      for (var plane = 0; plane < 3; plane++)
      {
         if (plane==0) planeActivated = "z";
         else if (plane==1) planeActivated = "y";
         else planeActivated = "x";

         for (var sliceNr = 0; sliceNr < numberOfSlices; sliceNr++)
         {
            planeTexture[index] = gl.createTexture();
            planeImage[index] = new Image();

            planeImage[index].onload = function() { imagesToLoad--; }
            planeImage[index].onerror = function() { imagesToLoad--; }
            planeImage[index].onabort = function() { imagesToLoad--; }
            planeImage[index].src = link + "/" + texDir + "_" + planeActivated + "_" + sliceNr + fileFormat;

            if (logging && sliceNr==0)
               console.log("first image in series: "+planeImage[index].src);
            if (logging && sliceNr==numberOfSlices-1)
               console.log("last image in series: "+planeImage[index].src);

            index++;
         }
      }

      if (logging)
      {
         console.log("link: " + link);
         console.log("texDir: " + texDir);
         console.log("numberOfSlices: " + numberOfSlices );
      }
   }

Zuerst werden erneut die Informationen aus dem Ordnernamen ausgelesen um danach die benötigten Texturen (3 mal der Anzahl von Texturen pro Richtung x,y,z) neu zu initialisieren. Hierfür werden alle Schichten durchiteriert. Die Texturen bekommen hierfür jeweils den Namen des zu verwendenden png-Bildes mitgeteilt. Von besonderer Wichtigkeit ist die Zeile

planeImage[index].onload = function() {imagesToLoad--;}  

Javascript ermöglicht es durch den Zusatz .onload zu warten bis planeImage[index].src wirklich vollständig geladen wurde und erst dann die Variable imagesToLoad zu dekrementieren. Diese globale Variable findet dann in der drawScene-Methode größere Bedeutung. Die Initialisierungsschritte sind somit abgeschlossen. Es folgt das eigentliche Darstellen der Daten in WebGL mit drawScene

checkGUI | | drawScene Teil 1

Options: