之前的项目已经为我们在汉明码上叠加了一个立方体,下面我们希望能在上面叠加一个3D模型
并可以定时消失,按键位暂停动画
ofAPP.cpp如下:
#include "ofApp.h"
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
//--------------------------------------------------------------
void ofApp::setup(){
animateDuration=10;//定时10秒消失
markNum = 0;
loopNum = 0;
markDuration = 0; //汉明码出现在摄像头中的伪时间
isFindMark = false;
ofSetLogLevel(OF_LOG_VERBOSE);
ofBackground(50, 0);
ofSetWindowShape(640, 480);
bAnimate = true;
//ofSetVerticalSync(true);
/* initialize lighting */
ofEnableDepthTest();
ofDisableArbTex(); // we need GL_TEXTURE_2D for our models coords.
model.loadModel("astroBoy_walk.dae", true);//3D模型支持.3ds .x .dae 等等主流格式
model.setScale(0.01f, 0.01f, 0.01f);
model.setRotation(0, 90, -2, 0, 0);
model.setLoopStateForAllAnimations(OF_LOOP_NORMAL);
model.playAllAnimations();
//if (bAnimate) {
//model.setPausedForAllAnimations(true);
//}
//m_models.push_back(model);
// }
//m_meshes.resize(model_names.size(), ofMesh());
////////////////////////////////////////////////////////
m_video.setDeviceID(0);
m_video.initGrabber(640, 480);
Point3f corners_3d[] =
{
Point3f(-0.5f, -0.5f, 0),
Point3f(-0.5f, 0.5f, 0),
Point3f( 0.5f, 0.5f, 0),
Point3f( 0.5f, -0.5f, 0)
};
float camera_matrix[] =
{
848.069f, 0.0f, 268.697f,
0.0f, 847.687f, 264.266f,
0.0f, 0.0f, 1.0f
};
float dist_coeff[] = {-0.445957f, 0.278828f, -0.002213f, -0.000656f};
m_corners_3d = vector<Point3f>(corners_3d, corners_3d + 4);
//Mat构造函数不会拷贝数据,只会将指针指向数据区域,所以对于局部变量内存,需要clone
m_camera_matrix = Mat(3, 3, CV_32FC1, camera_matrix).clone();
m_dist_coeff = Mat(1, 4, CV_32FC1, dist_coeff).clone();
}
//--------------------------------------------------------------
void ofApp::update() {
/*for (int i