コード例 #1
0
ファイル: ofxAEComposition.cpp プロジェクト: N3TWORK/ofxAE
void Composition::draw(ofCamera *camera, float alpha)
{
	multimap<float,AVLayer*> work;
	for(vector<AVLayer*>::iterator layer = active_layers_.begin(); layer != active_layers_.end(); ++layer) {
		AVLayer *l = *layer;
		if(l->getOpacity() == 0) {
			continue;
		}
		if(l->is3D()) {
			ofVec3f dist = (*layer)->getNode().getWorldMatrix()->getTranslation();
			if(camera) {
				dist = camera->worldToCamera(dist);
				dist.z = -dist.z;
			}
			work.insert(pair<float,AVLayer*>(dist.z, l));
		}
		else {
			if(!work.empty()) {
				if(camera) {
					camera->begin();
				}
				for(multimap<float,AVLayer*>::iterator w = work.begin(); w != work.end(); ++w) {
					(*w).second->draw(alpha);
				}
				work.clear();
				if(camera) {
					camera->end();
				}
			}
			l->draw(alpha);
		}
	}
	if(!work.empty()) {
		if(camera) {
			camera->begin();
		}
		for(multimap<float,AVLayer*>::iterator w = work.begin(); w != work.end(); ++w) {
			(*w).second->draw(alpha);
		}
		work.clear();
		if(camera) {
			camera->end();
		}
	}
}
コード例 #2
0
ファイル: ofxAELoader.cpp プロジェクト: nariakiiwatani/ofxAE
void Loader::setupAVLayerJson(AVLayer& layer, const ofJson& json)
{
	const ofJson& properties = json["property"];
	layer.allocate(json.value("width", 1), json.value("height", 1));
	layer.is_3d_ = json.value("is3d", false);
	layer.is_collapse_ = json.value("isCollapse", false);
	const string& blend_mode = json.value("blendingMode", "none");
	if(blend_mode == "none")		{ layer.blend_mode_ = OF_BLENDMODE_ALPHA; }
	if(blend_mode == "add")			{ layer.blend_mode_ = OF_BLENDMODE_ADD; }
	if(blend_mode == "subtract")	{ layer.blend_mode_ = OF_BLENDMODE_SUBTRACT; }
	setupLayerJson(layer, json);
	auto masks = properties.find("mask");
	if(masks != end(properties) && masks->is_array()) {
		int mask_count = masks->size();
		for(int i = 0; i < mask_count; ++i) {
			setupMaskJson(*layer.addNewMask("mask"+ofToString(i,2,'0')), (*masks)[i], ofVec2f(layer.getWidth(),layer.getHeight()));
		}
	}
}
コード例 #3
0
ファイル: ofxAEComposition.cpp プロジェクト: N3TWORK/ofxAE
void Composition::update()
{
	bool use_time = is_time_updating_||ofGetTargetFrameRate()==0;
	int frame = frame_.update(use_time?ofGetLastFrameTime()*frame_rate_:frame_rate_/ofGetTargetFrameRate());

	active_layers_.clear();
	for(vector<AVLayer*>::iterator layer = av_.begin(); layer != av_.end(); ++layer) {
		AVLayer *l = *layer;
		l->setPropertyFrame(frame);
		if(l->isActive()) {
			l->update();
			active_layers_.push_back(l);
		}
	}

	active_camera_ = NULL;
	for(vector<CameraLayer*>::iterator camera = camera_.begin(); camera != camera_.end(); ++camera) {
		CameraLayer *c = *camera;
		c->setPropertyFrame(frame);
		if(c->isActive()) {
			c->update();
			if(!active_camera_) {
				active_camera_ = c;
			}
		}
	}
	if(active_camera_) {
		active_camera_->prepare();
	}
	for(vector<MarkerWrapper>::iterator marker = marker_.begin(); marker != marker_.end(); ++marker) {
		MarkerWrapper &m = *marker;
		m.is_in_prev = m.is_in;
		int from = m.ptr->getFrom();
		int to = from + m.ptr->getLength()-1;
		m.is_in = (m.ptr->getFrom() <= frame) && (frame <= from + m.ptr->getLength()-1);
	}
}
コード例 #4
0
ファイル: ofxAEComposition.cpp プロジェクト: saadahid/ofxAE
void Composition::update()
{
	CameraLayer *active_camera = NULL;
	for(vector<CameraLayer*>::iterator camera = camera_.begin(); camera != camera_.end(); ++camera) {
		if((*camera)->isActive()) {
			(*camera)->update();
			if(!active_camera) {
				active_camera = *camera;
			}
		}
	}
	vector<AVLayer*> active;
	for(vector<AVLayer*>::iterator layer = av_.begin(); layer != av_.end(); ++layer) {
		AVLayer *l = *layer;
		if(l->isActive()) {
			l->update();
			active.push_back(l);
		}
	}
	fbo_.begin();
	ofClear(0);
	multimap<float,AVLayer*> work;
	for(vector<AVLayer*>::iterator layer = active.begin(); layer != active.end(); ++layer) {
		AVLayer *l = *layer;
		if(l->is3D()) {
			ofVec3f dist = (*layer)->getNode().getWorldMatrix()->getTranslation();
			if(active_camera) {
				dist = active_camera->worldToCamera(dist);
				dist.z = -dist.z;
			}
			work.insert(pair<float,AVLayer*>(dist.z, l));
		}
		else {
			if(!work.empty()) {
				if(active_camera) {
					active_camera->begin();
				}
				for(multimap<float,AVLayer*>::iterator w = work.begin(); w != work.end(); ++w) {
					(*w).second->draw();
				}
				work.clear();
				if(active_camera) {
					active_camera->end();
				}
			}
			l->draw();
		}
	}
	if(!work.empty()) {
		if(active_camera) {
			active_camera->begin();
		}
		for(multimap<float,AVLayer*>::iterator w = work.begin(); w != work.end(); ++w) {
			(*w).second->draw();
		}
		work.clear();
		if(active_camera) {
			active_camera->end();
		}
	}
	fbo_.end();
}