//-------------------------------------------------------------- void testApp::draw(){ ofEnableLighting(); light.enable(); if(rotating) t++; fbo.begin(); glColor4f(1, 1, 1, 1); ofClear(0, 0, 0, 0); glPushMatrix(); glScalef(2, 2, 2); glTranslatef(ofGetWidth()/2, ofGetHeight()/2, 0); glRotatef(t, 0, 1, 1); /*glBegin(GL_QUADS); glVertex2f(-100, -100); glVertex2f(100, -100); glVertex2f(100, 100); glVertex2f(-100, 100); glEnd();*/ ofBox(0, 0, 0, 100); glPopMatrix(); fbo.end(); ofDisableLighting(); if(shading) { fxaa.begin(); fxaa.setUniformTexture("bgl_RenderedTexture", fbo.getTextureReference(0), 0); fxaa.setUniform1f("bgl_RenderedTextureWidth", fbo.getWidth()); fxaa.setUniform1f("bgl_RenderedTextureHeight", fbo.getHeight()); } else { fbo.getTextureReference(0).bind(); } glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex2f(0, 0); glTexCoord2f(fbo.getWidth(), 0); glVertex2f(ofGetWidth(), 0); glTexCoord2f(fbo.getWidth(), fbo.getHeight()); glVertex2f(ofGetWidth(), ofGetHeight()); glTexCoord2f(0, fbo.getHeight()); glVertex2f(0, ofGetHeight()); glEnd(); if(shading) { fxaa.end(); } else { fbo.getTextureReference(0).unbind(); } }
void updateTexture(ofFbo & videoFrame){ if(!fbo.isAllocated()){ fbo.allocate(videoFrame.getWidth(),videoFrame.getHeight(),videoFrame.getTextureReference().texData.glInternalFormat); } videoFrame.bind(); glReadBuffer(GL_COLOR_ATTACHMENT0); glBindTexture(fbo.getTextureReference().texData.textureTarget, (GLuint)fbo.getTextureReference().texData.textureID); glCopyTexImage2D(fbo.getTextureReference().texData.textureTarget,0,fbo.getTextureReference().texData.glInternalFormat,0,0,fbo.getWidth(),fbo.getHeight(),0); videoFrame.unbind(); glReadBuffer(GL_BACK); }
void FakeSSSPass::render(ofFbo& readFbo, ofFbo& writeFbo, ofTexture& depthTex) { writeFbo.begin(); shader.begin(); shader.setUniformTexture("Texture", readFbo.getTextureReference(), 0); shader.setUniform3f("LightPosition", lightPosition.x, lightPosition.y, lightPosition.z); shader.setUniform1f("MaterialThickness", materialThickness); shader.setUniform3f("ExtinctionCoefficient", extinctionCoefficient.x, extinctionCoefficient.y, extinctionCoefficient.z); shader.setUniform4f("LightColor", lightColor.x, lightColor.y, lightColor.z, 1.0); shader.setUniform4f("BaseColor", baseColor.x, baseColor.y, baseColor.z, 1.0); shader.setUniform4f("SpecColor", specularColor.y, specularColor.y, specularColor.z, 1.0 ); shader.setUniform1f("SpecPower", specular); shader.setUniform1f("RimScalar", rimScale); shader.setUniform1f("AttenuationOffset", attenuationOffset); texturedQuad(0, 0, writeFbo.getWidth(), writeFbo.getHeight()); shader.end(); writeFbo.end(); }
void draw() { ofBackground(25); fbo.begin(); ofClear(0,0,0,0); ofEnableDepthTest(); camera.begin(); glPushMatrix(); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE); glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GREATER, 0); if(dvel) draw_velocity(); if(dden){ draw_density(); } glDisable(GL_BLEND); glDisable(GL_ALPHA_TEST); glPopMatrix(); if( drawAxis ){ ofDrawAxis(15); } camera.end(); ofDisableDepthTest(); fbo.end(); shader.begin(); shader.setUniformTexture("tex",fbo.getTextureReference(),0); shader.setUniform2f("resolution",dw,dh); shader.setUniform1f("timer",ofGetElapsedTimef()); fbo.draw(0,0); shader.end(); gui.draw(); }
//-------------------------------------------------------------- void testApp::drawPanels(ofFbo fbo) { glPushMatrix(); glTranslatef(0, 0, 0); ofTexture &t = fbo.getTextureReference(); ofPoint c; t.bind(); glBegin(GL_QUADS); int ow = OUTPUT_SCREEN_W/3; int oh = OUTPUT_SCREEN_H; int iw = FBO_W/5; int ih = FBO_H; // -------------------------------------------- // PANEL 1 // left / top c = t.getCoordFromPoint(0, 0); glTexCoord2f(c.x, c.y); glVertex2f(0, 0); // right / top c = t.getCoordFromPoint(iw, 0); glTexCoord2f(c.x, c.y); glVertex2f(ow, 0); // right / bottom c = t.getCoordFromPoint(iw, ih); glTexCoord2f(c.x, c.y); glVertex2f(ow, oh); // left / bottom c = t.getCoordFromPoint(0, ih); glTexCoord2f(c.x, c.y); glVertex2f(0, oh); // -------------------------------------------- // PANEL 2 // left / top c = t.getCoordFromPoint(iw*2, 0); glTexCoord2f(c.x, c.y); glVertex2f(ow, 0); // right / top c = t.getCoordFromPoint(iw*3, 0); glTexCoord2f(c.x, c.y); glVertex2f(ow*2, 0); // right / bottom c = t.getCoordFromPoint(iw*3, ih); glTexCoord2f(c.x, c.y); glVertex2f(ow*2, oh); // left / bottom c = t.getCoordFromPoint(iw*2, ih); glTexCoord2f(c.x, c.y); glVertex2f(ow, oh); // -------------------------------------------- // PANEL 3 // left / top c = t.getCoordFromPoint(iw*4, 0); glTexCoord2f(c.x, c.y); glVertex2f(ow*2, 0); // right / top c = t.getCoordFromPoint(iw*5, 0); glTexCoord2f(c.x, c.y); glVertex2f(ow*3, 0); // right / bottom c = t.getCoordFromPoint(iw*5, ih); glTexCoord2f(c.x, c.y); glVertex2f(ow*3, oh); // left / bottom c = t.getCoordFromPoint(iw*4, ih); glTexCoord2f(c.x, c.y); glVertex2f(ow*2, oh); glEnd(); t.unbind(); glPopMatrix(); }
void draw() { ofBackground(0); ofPushMatrix(); ofPushStyle(); float scaleFactor = ofGetHeight() / (float) MAX(1, video.getHeight()); ofScale(scaleFactor, scaleFactor); ofTranslate(0, -verticalOffset); float totalStability = ofClamp(ofMap(smoothedMotionValue, motionMin, motionMax, 0, stability), 0, 1); int n = contours.size(); for(int i = 0; i < n; i++) { cv::Rect cur = contours.getBoundingRect(i); float w = cur.width, h = cur.height; float sx = cur.x, sy = cur.y; buffer.begin(); ofDisableBlendMode(); // clear buffer area ofClear(0, 0); // draw filled shape (could blur here) ofPushMatrix(); ofSetColor(255); ofFill(); ofBeginShape(); vector<cv::Point>& vertices = contours.getContour(i); for(int j = 0; j < vertices.size(); j++) { ofVertex(vertices[j].x, vertices[j].y); } ofEndShape(); ofPopMatrix(); // draw body image ofEnableBlendMode(OF_BLENDMODE_MULTIPLY); ofSetColor(255); video.getTexture().drawSubsection(sx, sy, w, h, sx, sy); buffer.end(); ofEnableBlendMode(OF_BLENDMODE_ALPHA); ofPushMatrix(); ofVec2f center = toOf(contours.getCenter(i)); ofVec2f offset = center - bodyCenter; float orientation = atan2f(offset.y, offset.x); float spread = totalStability * spreadAmplitude; ofVec2f position = bodyCenter + offset + ofVec2f(offset.x, 0) * spread; float id = orientation; //contours.getLabel(i) % 3; float baseRotation = rotationRate * ofGetElapsedTimef() + id; float rotation = ofLerp(sin(baseRotation), ofSignedNoise(baseRotation), rotationNoise); rotation *= rotationAmplitude * totalStability; float baseScale = scaleRate * ofGetElapsedTimef() + id; float scale = 1 + scaleAmplitude * ofLerp(sin(baseScale), ofSignedNoise(baseScale), scaleNoise) * totalStability; ofPushStyle(); ofSetColor(tintRed, tintGreen, tintBlue); ofTranslate(position); for(int j = 0; j < repetitionSteps; j++) { ofPushMatrix(); float rotationAmount = ofMap(j, -1, repetitionSteps, 0, rotation); ofRotate(rotationAmount); // ofVec3f axis(0, 0, 1); // ofRotate(rotationAmount, axis.x, axis.y, axis.z); float curScale = ofMap(j, -1, repetitionSteps, 1, scale); ofScale(curScale, curScale, curScale); buffer.getTextureReference().drawSubsection(-w / 2, -h / 2, 0, w, h, sx, sy); ofPopMatrix(); } ofPopStyle(); if(debug) { ofDrawBitmapStringHighlight(ofToString(contours.getLabel(i)), 0, 0); } ofPopMatrix(); } ofPopStyle(); ofPopMatrix(); ofEnableAlphaBlending(); if(debug) { ofPushStyle(); ofSetColor(255); ofNoFill(); ofSetLineWidth(2); ofDrawRectangle(0, 0, video.getWidth(), video.getHeight()); video.draw(0, 0); ofPopStyle(); ofPushStyle(); ofEnableBlendMode(OF_BLENDMODE_ADD); ofPushMatrix(); ofScale(1 / rescale, 1 / rescale); drawMat(thresholdedRunning, 0, 0); ofPopMatrix(); ofSetColor(magentaPrint, 10); drawMat(thresholded, 0, 0); ofSetLineWidth(3); for(int i = 0; i < n; i++) { ofSetColor(255); contours.getPolyline(i).draw(); } ofNoFill(); ofSetColor(cyanPrint); ofCircle(bodyCenter, 10); ofPopStyle(); #ifndef USE_VIDEO if(video.isLiveDataReady()) { stringstream status; status << video.getWidth() << "x" << video.getHeight() << " @ " << (int) ofGetFrameRate() << " app-fps " << " / " << (int) video.getFrameRate() << " cam-fps"; ofDrawBitmapString(status.str(), 10, ofGetHeight() - 40); } #endif } }
Obj(ofFbo & videoFrame) :pixelsChanged(false) ,createdTexPixels(false) { pixels.allocate(videoFrame.getWidth(),videoFrame.getHeight(),ofGetImageTypeFromGLType(videoFrame.getTextureReference().texData.glInternalFormat)); updateTexture(videoFrame); total_num_frames++; }