AR——在汉明码上叠加一个3D模型

该博客介绍了如何在一个已有的汉明码基础上叠加3D模型,并实现模型的定时消失及通过按键暂停动画的功能。通过示例代码展示了在ofAPP.cpp中的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前的项目已经为我们在汉明码上叠加了一个立方体,下面我们希望能在上面叠加一个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 
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值