Vizualizáció és képszintézis Térfogati textúrák kezelése (Dart + GLSL) Szécsi László
Új textúra-objektum (Quad osztályba mehet) // tagváltozó WebGL.Texture texture;
Textúra létrhozása és betöltése Quad.createResources(WebGL.RenderingContext gl, String baseUrl, Function mediaLoadedCallback){ texture = gl.createTexture(); ImageElement img = new ImageElement(); Completer c = new Completer(); img.onLoad.listen((_) { gl.bindTexture(WebGL.RenderingContext.TEXTURE_2D, texture); gl.texImage2D(WebGL.RenderingContext.TEXTURE_2D, 0, WebGL.RenderingContext.RGBA, WebGL.RenderingContext.RGBA, WebGL.RenderingContext.UNSIGNED_BYTE, img); c.complete(img.src); }); img.src = '$baseUrl/textures/brain-at_4096.jpg'; c.future.then( (_) {mediaLoadedCallback();} );
Quad létrehozása quad = new Quad.createResources(gl, getBaseUrl(), requestRedraw); // az init végén meg nem kell requestRedraw, induljon a rajzolás a kitöltés után
Fragment shader // uniform változó uniform sampler2D volume; // olvasás a textúrából texture2D(volume, tileOffset0 + inTile);
Textúra bekötése // tagváltozó WebGL.UniformLocation _volumeLocation; // shaderfordítás után _volumeLocation = gl.getUniformLocation(program, 'volume'); // rajzolás előtt gl.uniform1i(_volumeLocation, 0); gl.bindTexture(WebGL.RenderingContext.TEXTURE_2D, texture); gl.texParameteri(WebGL.RenderingContext.TEXTURE_2D, WebGL.RenderingContext.TEXTURE_MIN_FILTER, WebGL.RenderingContext.LINEAR); gl.texParameteri(WebGL.RenderingContext.TEXTURE_2D, WebGL.RenderingContext.TEXTURE_MAG_FILTER, WebGL.RenderingContext.LINEAR);