示例#1
0
				void setup()
				{					
					if (bSetup)
						return;
					
					grayLineTex.allocate(1,3, GL_LUMINANCE_ALPHA);
					unsigned char gray_line_data[3*2] = {
						255,0,	255,255,	255,0
						//	DARK	BRIGHT		DARK
					};
					grayLineTex.loadData(gray_line_data, 1,3, GL_LUMINANCE_ALPHA); 
					
					rgbLineTex.allocate(1,7, GL_RGBA);
					unsigned char rgb_line_data[7*4] = {
						255,0,0,0,	255,0,0,255,
						//r	DARK		BRIGHT
						0,255,0,0,	0,255,0,255,
						//g	DARK		BRIGHT
						0,0,255,0,	0,0,255,255,
						//b	DARK		BRIGHT
						0,0,255,0
						//	DARK
					};
					rgbLineTex.loadData(rgb_line_data, 1,7, GL_RGBA);
					
					bSetup = true;
					cout << "Renderer textures initialized." << endl;
				}				
void dfDisplacementMap::applyDisplaceMap(ofxCvColorImage& sourceImage,ofTexture& destTexture,float hscale=0.3, float vscale=0.3){
    //apply displacement
    unsigned char * displacePixels  = this->getPixels();
    unsigned char * pixels          = sourceImage.getPixels();
    int displace,hdisplace,vdisplace;
    int totalPixels=height*width*3;
    unsigned char * videoDisplaced     = new unsigned char[totalPixels];
    for (int i = 0; i < totalPixels;i+=3){
        hdisplace = (int)((displacePixels[i] - 127)*hscale); //x coord
        vdisplace = (int)((displacePixels[i+2] - 127) *vscale); //y coord
        if( i%(320*3)+hdisplace*3 >0 && i%(320*3)+hdisplace*3<320*3){
            displace=hdisplace+vdisplace*320;
        }else{
            displace = 0;
        }
        displace*= 3;
        if(i+displace>0 && i+displace<totalPixels){
            videoDisplaced[i]   = pixels[i+displace];
            videoDisplaced[i+1] = pixels[i+displace+1];
            videoDisplaced[i+2] = pixels[i+displace+2];
        }
    }
    destTexture.loadData(videoDisplaced,width,height, GL_RGB);
    delete videoDisplaced;
}
示例#3
0
//---------------------------------------------------------------------
static void prepareBitmapTexture() {

    if (!bBitmapTexturePrepared) {

        glesBitmappedFontTexture.allocate(16*16, 16*16, GL_LUMINANCE_ALPHA, false);
        bBitmapTexturePrepared = true;

        for (int i = 0; i < 256; i++) {

            const unsigned char * face = bmpChar_8x13_Map[i];

            for (int j = 1; j < 15; j++) {
                for (int k = 0; k < 8; k++) {
                    if ( ((face[15-j] << k) & (128)) > 0 ) {
                        myLetterPixels[(((int)(i/16))*16*16*16+(i%16)*16 + (j-1)*16*16 + k)*2] = 255;
                        myLetterPixels[(((int)(i/16))*16*16*16+(i%16)*16 + (j-1)*16*16 + k)*2+1] = 255;
                    } else {
                        myLetterPixels[(((int)(i/16))*16*16*16+(i%16)*16 + (j-1)*16*16 + k)*2] = 0;
                        myLetterPixels[(((int)(i/16))*16*16*16+(i%16)*16 + (j-1)*16*16 + k)*2+1] = 0;
                    }
                }
            }
        }

        glesBitmappedFontTexture.loadData(myLetterPixels, 16*16, 16*16, GL_LUMINANCE_ALPHA);

    }

}
    void copy(S& src, ofTexture& tex) {
        imitate(tex, src);
        int w = tex.getWidth(), h = tex.getHeight();
        int glType = tex.getTextureData().glTypeInternal;
        Mat mat = toCv(src);
		tex.loadData(mat.ptr(), w, h, glType);
    }
//----------------------------------------------------------------
bool ofLoadImage(ofTexture & tex, const ofBuffer & buffer){
	ofPixels pixels;
	bool loaded = ofLoadImage(pixels,buffer);
	if(loaded){
		tex.allocate(pixels.getWidth(), pixels.getHeight(), ofGetGlInternalFormat(pixels));
		tex.loadData(pixels);
	}
	return loaded;
}
//----------------------------------------------------------------
bool ofLoadImage(ofTexture & tex, string path){
	ofPixels pixels;
	bool loaded = ofLoadImage(pixels,path);
	if(loaded){
		tex.allocate(pixels.getWidth(), pixels.getHeight(), ofGetGlInternalFormat(pixels));
		tex.loadData(pixels);
	}
	return loaded;
}
//----------------------------------------------------------------
bool ofLoadImage(ofTexture & tex, const std::string& path, const ofImageLoadSettings &settings){
	ofPixels pixels;
	bool loaded = ofLoadImage(pixels, path, settings);
	if(loaded){
		tex.allocate(pixels.getWidth(), pixels.getHeight(), ofGetGlInternalFormat(pixels));
		tex.loadData(pixels);
	}
	return loaded;
}
示例#8
0
//--------------------------------------------------------------
void ofxCreateGaussianMapTexture(ofTexture& texture, int resolution, int textureTarget)
{
    ofTextureData textureData;
    textureData.width = resolution;
    textureData.height = resolution;
    textureData.glInternalFormat = GL_RGBA;
    textureData.textureTarget = textureTarget;

    unsigned char *data = createGaussianMap(resolution);

    texture.allocate(textureData);
    texture.loadData(data, resolution, resolution, GL_RGBA);
}
示例#9
0
void PCDecode::updateSpacePreview(int width, int height, unsigned char data[], ofTexture &texture, std::vector<PCPixel*> &foundPixels)
{
	float Xdash, Ydash;
	int nPixels = width * height;
	
	for (int iPixel=0; iPixel<nPixels; iPixel++)
	{
		Xdash = foundPixels[iPixel]->xdash.x;
		Ydash = foundPixels[iPixel]->xdash.y;
		
		data[iPixel*3] = float(255) * Xdash;
		data[iPixel*3+1] = float(255) * Ydash;
		data[iPixel*3+2] = 0;
	}
	texture.loadData(data, width, height, GL_RGB);	
}
示例#10
0
void testApp::randmap_rebuild(float rmin, float rmax)
{
    float * parts_buf = new float[numParticles * 4];
    
    for (int x = 0; x < parts_res; x++) {
        for (int y = 0; y < parts_res; y++) {
            int i = x * parts_res + y;
            parts_buf[i * 3 + 0] = ofRandom(rmin, rmax);
            parts_buf[i * 3 + 1] = ofRandom(rmin, rmax);
            parts_buf[i * 3 + 2] = ofRandom(rmin, rmax);
            parts_buf[i * 3 + 3] = ofRandom(rmin, rmax);
        }
    }
    randtex.loadData(parts_buf, parts_res, parts_res, GL_RGBA);

    delete parts_buf;
}
    void copy(S& src, ofTexture& tex) {
        Mat mat = toCv(src);
		int glType;
		Mat buffer;
		if(mat.depth() != CV_8U) {
			copy(mat, buffer, CV_8U);
		} else {
			buffer = mat;
		}
		if(mat.channels() == 1) {
			glType = GL_LUMINANCE;
		} else {
			glType = GL_RGB;
		}
		int w = buffer.cols;
		int h = buffer.rows;
		tex.allocate(w, h, glType);
		tex.loadData(buffer.ptr(), w, h, glType);
    }
示例#12
0
//---------------------------------------------------------------------
static void prepareBitmapTexture(){

			
	
	if (!bBitmapTexturePrepared){
		myLetterPixels.allocate(16*16, 16*16, 4); // letter size:8x14pixels, texture size:16x8letters, gl_rgba: 4bytes/1pixel
        myLetterPixels.set(0);

		bitmappedFontTexture.allocate(16*16, 16*16, GL_RGBA, false);
		
		bBitmapTexturePrepared = true;
		
		for (int i = 0; i < 256; i++) {
			
			const unsigned char * face = bmpChar_8x13_Map[i];
			
			for (int j = 1; j < 15; j++){
				for (int k = 0; k < 8; k++){
					if ( ((face[15-j] << k) & (128)) > 0 ){
						myLetterPixels[(((int)(i/16))*16*16*16+(i%16)*16 + (j-1)*16*16 + k)*4] = 255;
						myLetterPixels[(((int)(i/16))*16*16*16+(i%16)*16 + (j-1)*16*16 + k)*4+1] = 255;
						myLetterPixels[(((int)(i/16))*16*16*16+(i%16)*16 + (j-1)*16*16 + k)*4+2] = 255;
						myLetterPixels[(((int)(i/16))*16*16*16+(i%16)*16 + (j-1)*16*16 + k)*4+3] = 255;
					}else{
						myLetterPixels[(((int)(i/16))*16*16*16+(i%16)*16 + (j-1)*16*16 + k)*4] = 0;
						myLetterPixels[(((int)(i/16))*16*16*16+(i%16)*16 + (j-1)*16*16 + k)*4+1] = 0;
						myLetterPixels[(((int)(i/16))*16*16*16+(i%16)*16 + (j-1)*16*16 + k)*4+2] = 0;
						myLetterPixels[(((int)(i/16))*16*16*16+(i%16)*16 + (j-1)*16*16 + k)*4+3] = 0;
					}
				}
			}
		}
		
		bitmappedFontTexture.loadData(myLetterPixels);
		bitmappedFontTexture.setTextureMinMagFilter(GL_LINEAR,GL_NEAREST);

		charMesh.setMode(OF_PRIMITIVE_TRIANGLES);
		
	}

}
示例#13
0
//--------------------------------------------------------------
void testApp::setup(){
//    ofSetFrameRate(60);
    ofBackground(0, 0, 0);
    glDisable(GL_DEPTH_TEST);

    float w = 720; //ofGetWidth();
    float h = 720; //ofGetHeight();
    
    
//    renderFbo.allocate(ofGetWidth() * 0.75, ofGetHeight() * 0.75, GL_RGBA32F);
    renderFbo.allocate(w, h, GL_RGBA32F);
    renderFbo.getTextureReference().setTextureMinMagFilter(GL_NEAREST, GL_NEAREST);
//    renderFbo.getTextureReference().setTextureWrap(GL_CLAMP_TO_BORDER, GL_CLAMP_TO_BORDER);
    
    parts_res = (int)sqrt((float)numParticles);
    numParticles = parts_res * parts_res;
    float * parts_buf = new float[numParticles * 4];
    
    for (int x = 0; x < parts_res; x++) {
        for (int y = 0; y < parts_res; y++) {
            int i = x * parts_res + y;
            parts_buf[i * 4 + 0] = ofRandom(0.0, w-1);
            parts_buf[i * 4 + 1] = ofRandom(0.0, h-1);
            parts_buf[i * 4 + 2] = ofRandom(0.0, part_life);
            parts_buf[i * 4 + 3] = 0.0;
            /* pos is now an index into the postion map fbo */
            pos[i][0] = x;
            pos[i][1] = y;
            pos[i][2] = 0;
        }
    }
    parts_vbo.setVertexData((ofVec3f *)&pos[0], numParticles, GL_STATIC_DRAW);
    
    randtex.allocate(parts_res, parts_res, GL_RGBA32F);
    randtex.setTextureMinMagFilter(GL_NEAREST, GL_NEAREST);
    randtex.loadData(parts_buf, parts_res, parts_res, GL_RGBA);
    
    partsFbo.allocate(parts_res, parts_res, GL_RGBA32F);
    partsFbo.src->getTextureReference().setTextureMinMagFilter(GL_NEAREST, GL_NEAREST);
    partsFbo.dst->getTextureReference().setTextureMinMagFilter(GL_NEAREST, GL_NEAREST);
    partsFbo.src->getTextureReference().loadData(parts_buf, parts_res, parts_res, GL_RGBA);
    partsFbo.dst->getTextureReference().loadData(parts_buf, parts_res, parts_res, GL_RGBA);
//    partsFbo.src->getTextureReference().setTextureWrap(GL_CLAMP_TO_BORDER, GL_CLAMP_TO_BORDER);
//    partsFbo.dst->getTextureReference().setTextureWrap(GL_CLAMP_TO_BORDER, GL_CLAMP_TO_BORDER);
    
    delete[] parts_buf;
    
    colorFbo.allocate(parts_res, parts_res, GL_RGBA32F);
    colorFbo.src->getTextureReference().setTextureMinMagFilter(GL_NEAREST, GL_NEAREST);
    colorFbo.dst->getTextureReference().setTextureMinMagFilter(GL_NEAREST, GL_NEAREST);
//    colorFbo.src->getTextureReference().setTextureWrap(GL_CLAMP_TO_BORDER, GL_CLAMP_TO_BORDER);
//    colorFbo.dst->getTextureReference().setTextureWrap(GL_CLAMP_TO_BORDER, GL_CLAMP_TO_BORDER);
    
    colorShader.load("", "color.frag");
    
    velFbo.allocate(parts_res, parts_res, GL_RGBA32F);
    velFbo.src->getTextureReference().setTextureMinMagFilter(GL_NEAREST, GL_NEAREST);
    velFbo.dst->getTextureReference().setTextureMinMagFilter(GL_NEAREST, GL_NEAREST);
//    velFbo.src->getTextureReference().setTextureWrap(GL_CLAMP_TO_BORDER, GL_CLAMP_TO_BORDER);
//    velFbo.dst->getTextureReference().setTextureWrap(GL_CLAMP_TO_BORDER, GL_CLAMP_TO_BORDER);
    velshader.load("", "velocity.frag");
    
    partshader.load("particle.vert", "");
    posshader.load("", "position.frag");
    
    debugShader.load("", "debug.frag");
    debugFbo.allocate(ofGetWidth(), ofGetHeight(), GL_RGBA32F);
    

    
    w = h = renderFbo.getHeight();//720;//ofGetHeight();
    
    dja.setup(w, h, 200);
    dja.logmaxd = 5.0;
    dja.setZoom(zoom);
    dja.setParam(0.5 * PI, 0.5 * PI, -0.5 * PI, -0.5 * PI);
    dja.update();
    randmap_rebuild(-1.0, 1.0);
    
    needDraw = true;
    
    blur = new ofxBlur();
//    blur->setup(ofGetWidth(), ofGetHeight());
    blur->setup(renderFbo.getWidth(), renderFbo.getHeight());
    blur->setScale(blur_scale);
    
//    printf("setup: blur dim %.0f %.0f\n", blur.getTextureReference().getWidth(), blur.getTextureReference().getHeight());
    
    cf.setup(renderFbo.getWidth(), renderFbo.getHeight());
    cf.setScale(0.5);
    cf.build(dja.getTextureReference());
//    cf.setScale(curl_scale);

    //at some stage set inital vels cause atm it looks not so good when it starts
    velFbo.src->begin();
    ofClear(ofFloatColor(0.0, 0.0, -1.0, 1.0));
    velFbo.src->end();
    
    width_offset = (int)((renderFbo.getWidth() - dja.getWidth()) / 2.0);
    printf("width_off = %d\n", width_offset);
    
#ifdef USE_KINECT
    //kinect/cv stuff
    
	kinect.setRegistration(true);
    
	kinect.init();
	kinect.open();
    
	colorImg.allocate(kinect.width, kinect.height);
	grayImage.allocate(kinect.width, kinect.height);
	grayThreshNear.allocate(kinect.width, kinect.height);
	grayThreshFar.allocate(kinect.width, kinect.height);
    
    nearThreshold = 255; //230;
	farThreshold = 78;//196;//70;
    
	angle = 0;
//	kinect.setCameraTiltAngle(angle);
    
    for (int i = 0; i < MAX_BLOBS; i++) {
        prev_points[i] = ofPoint(kinect.width/2.0, kinect.height/2.0);
    }
#endif
}
示例#14
0
//--------------------------------------------------------------
void testApp::setup(){
    
    ofBackground(0);
    ofSetFrameRate(30);
    ofEnableAlphaBlending();
    //    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    //    glEnable(GL_DEPTH_TEST);
    glPointSize(1.0);
    drawFBO = false;
    autoRotate = true;
    drawEQ = false;
    
    //not really needed
    //    glEnable(GL_ALPHA_TEST);
    //    glAlphaFunc(GL_GREATER, 0.10f);
    
    //generate the mesh points
    buildSphereMesh(rad, res, vm);
    cout << "nverts: " << vm.getNumVertices() << endl;
    cout << "arb: " << ofGetUsingArbTex() << ", norm: " << ofGetUsingNormalizedTexCoords() << endl;
    
    //load the texture shader
    shader.load("tex.vert", "tex.frag");
    
    //fft init
    fftSmoothed = new float[8192];
    memset(fftSmoothed, 0x00, sizeof(float) * 8192);
    
    //map the frequencies to bark bands
    float freq_spc = FREQ_MAX / (float)SPECTRAL_BANDS;
    
	for (int i = 0; i < SPECTRAL_BANDS; i++) {
        int bidx = bark(i * freq_spc);
        barkmap[i] = bidx;
    }
    
    //load the position updating frag shader
    pos_shader.load("", "position.frag");
    
    //for the sphere we set this to the resolution which = #of verts along each axis
    fbo_res = res;
    
    //init the fbo's with blank data
    vector<ofVec3f> fbo_init_data;
    fbo_init_data.assign(fbo_res * fbo_res, ofVec3f(0.0, 0.0, 0.0));
    
    posbuf.allocate(fbo_res, fbo_res, GL_RGB32F);
    posbuf.src->getTextureReference().loadData((float *)&fbo_init_data[0], fbo_res, fbo_res, GL_RGB);
    posbuf.dst->getTextureReference().loadData((float *)&fbo_init_data[0], fbo_res, fbo_res, GL_RGB);
    
    //reuse fbo_init_data for no real reason, it just needs to be blank
    eq_tex.allocate(fbo_res, 1, GL_RGB32F_ARB);
    eq_tex.loadData((float *)&fbo_init_data[0], fbo_res, 1, GL_RGB);
    
    axis_loc = fbo_res;
    angincr = 180.0/(float)fbo_res;

    player.loadSound("jhfd.mp3");
    
    player.play(); //go
}
示例#15
0
//--------------------------------------------------------------
void testApp::update(){
    
    /* get the spectral data */
    float * val = ofSoundGetSpectrum(nBandsToGet);
	for (int i = 0; i < nBandsToGet; i++){
		
		// let the smoothed calue sink to zero:
		fftSmoothed[i] *= 0.96f;
		
		// take the max, either the smoothed or the incoming:
		if (fftSmoothed[i] < val[i])
            fftSmoothed[i] = val[i];
        
        if (fftSmoothed[i] > fftmax) {
            fftmax = fftSmoothed[i];
        }
	}
    
    /* update our bark map'd frequency bins */
    memset(bins, 0x00, sizeof(bins));
    for (int i = 0; i < SPECTRAL_BANDS; i++) {
        int idx = barkmap[i];
        bins[idx] += fftSmoothed[i] * 20;
    }
    
    /* put the eq vals into a path to turn them into a curve */
    int line_len = fbo_res;
    float ppseg = line_len /(float)(BARK_MAX+1);
    eq_path.clear();
    eq_path.curveTo(0, -bins[0]);
    for (int i = 0; i < BARK_MAX; i++) {
        //        bins[i] = max(5.0f, bins[i]); //set a lower bound on the bin val
        eq_path.curveTo(i * ppseg, -bins[i]);
    }
    
    //    eq_path.curveTo(BARK_MAX * ppseg, -bins[0]);
    //    eq_path.curveTo(BARK_MAX * ppseg, -bins[0]);
    
    //smooth this out a little at the end so the eq texture wraps, 25 = BARK_MAX
    eq_path.curveTo(25 * ppseg, -(bins[0] + bins[24] + bins[23] + bins[22])/4.0f);
    eq_path.curveTo(26 * ppseg, -bins[0]);
    eq_path.curveTo(26 * ppseg, -bins[0]);
    
    ofMesh eq_m = eq_path.getTessellation();
    
    //load up the eq curve into a texture
    eq_tex.loadData((float *)eq_m.getVerticesPointer(), fbo_res, 1, GL_RGB);
    
    //update where on the axis we will apply the latest eq data
    axis_loc--;
    
    if (axis_loc < 0)
        axis_loc = fbo_res;
    
    //use fbo to work out displacement coeffcients
    posbuf.dst->begin();
    ofClear(0);
    pos_shader.begin();
    pos_shader.setUniformTexture("u_prevDisp", posbuf.src->getTextureReference(), 0);
    pos_shader.setUniformTexture("u_newDisp", eq_tex, 1); //pass the new displacement data
    pos_shader.setUniform1f("u_axisloc", axis_loc);
    pos_shader.setUniform1f("u_decayRate", posdecayrate);
    
    ofSetColor(255, 255, 255, 255);
    glBegin(GL_QUADS);
    glTexCoord2f(0, 0); glVertex3f(0, 0, 0);
    glTexCoord2f(fbo_res, 0); glVertex3f(fbo_res, 0, 0);
    glTexCoord2f(fbo_res, fbo_res); glVertex3f(fbo_res, fbo_res, 0);
    glTexCoord2f(0, fbo_res); glVertex3f(0, fbo_res, 0);
    glEnd();
    
    pos_shader.end();
    posbuf.dst->end();
    posbuf.swap();
    
}