import processing.video.*; Capture videoCapture; PImage textureImage; PImage heightMap; void setupTexture() { videoCapture = new Capture(this, 256, 256, 14); textureImage = createImage(256,256, RGB); ///* //textureImage = loadImage("crystaphyll_heightMap.png"); heightMap = loadImage("crystaphyll_heightMap.png"); for(int i=0; i < textureImage.pixels.length; i++) { float r = 205+round(random(20)+10); float g = 205+round(random(20)+10); float b = 245+round(random(20)+10); textureImage.pixels[i] = color(r, g, b); } // */ } void captureEvent(Capture myCapture) { videoCapture.read(); } PImage renderTexture() { // textureImage = videoCapture; imageProcessor(); textureImage.updatePixels(); return textureImage; } float r; float g; float b; float pr; float pg; float pb; float hr; float hg; float hb; float nr; float ng; float nb; float vr; float vg; float vb; void imageProcessor(){ for(int i=round(textureImage.pixels.length*.25); i < round(textureImage.pixels.length*.75); i++) { pr = red(textureImage.pixels[i]); pg = green(textureImage.pixels[i]); pb = blue(textureImage.pixels[i]); hr = red(heightMap.pixels[i]); hg = green(heightMap.pixels[i]); hb = blue(heightMap.pixels[i]); float prevvr = vr; float prevvg = vg; float prevvb = vb; vr = red(videoCapture.pixels[i]); vg = green(videoCapture.pixels[i]); vb = blue(videoCapture.pixels[i]); float diffvr = vr-prevvr; float diffvg = vg-prevvg; float diffvb = vb-prevvb; nr = neighborInfluence(i, "red", .01); ng = neighborInfluence(i, "green", .01); nb = neighborInfluence(i, "blue", .01); r=channelProcessor(hr, pr, nr, vr, 0, 235, 20); g=channelProcessor(hg, pg, ng, vg, 0, 255, 10); b=channelProcessor(hb, pb, nb, vb, 0, 235, 20); textureImage.pixels[i] = color(r, g, b); } } float channelProcessor(float hv,float pv, float nv, float vv, float minv, float maxv, float modRange) { float v = 0; if(random(255)>((255-vv))){ v = pv+(random(modRange)-(modRange*.5)); v += nv*sineWave(7777777); v += hv*.1; v = round(v); if(vmaxv) v=maxv; } else { v = pv; } return v; } float pixt; float pixl; float pixr; float pixb; float neighborInfluence(int i, String channel, float strength) { float p; if (channel == "red") { pixt = red(textureImage.pixels[i-textureImage.width]); pixl = red(textureImage.pixels[i-1]); pixr = red(textureImage.pixels[i+1]); pixb = red(textureImage.pixels[i+textureImage.width]); } else if (channel == "green") { pixt = green(textureImage.pixels[i-textureImage.width]); pixl = green(textureImage.pixels[i-1]); pixr = green(textureImage.pixels[i+1]); pixb = green(textureImage.pixels[i+textureImage.width]); } else if (channel == "blue") { pixt = blue(textureImage.pixels[i-textureImage.width]); pixl = blue(textureImage.pixels[i-1]); pixr = blue(textureImage.pixels[i+1]); pixb = blue(textureImage.pixels[i+textureImage.width]); } p = (((pixt+pixl+pixr+pixb)*.25*3.921568627451e-03)*strength)-(strength*.5); return p; }