And this is the test.cpp that uses the class. The actual class files cpp / h are here..
http://hestia.nighsoft.net/files/CvIrrC ... .1.tar.bz2
It is all based off of the simple tutorials given by both irrlicht and opencv.
Code: Select all
#include <irrlicht/irrlicht.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>
#include "CvIrrCamController.h"
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
IrrlichtDevice *device;
IVideoDriver* driver;
ISceneManager* smgr;
int main()
{
device = createDevice( video::EDT_OPENGL, dimension2d<s32>(640, 480), 16, false, false, false, 0);
driver = device->getVideoDriver();
smgr = device->getSceneManager();
device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo");
//something for 3d reference
IAnimatedMesh* mesh = smgr->getMesh("media/sydney.md2");
IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(mesh);
if (node)
{
node->setMaterialFlag(EMF_LIGHTING, false);
node->setMD2Animation ( scene::EMAT_STAND );
node->setMaterialTexture( 0, driver->getTexture("media/sydney.bmp") );
node->setPosition(vector3df(10,10,-10));
}
//and some more
device->getFileSystem()->addZipFileArchive("media/map-20kdm2.pk3");
IAnimatedMesh* mesh2 = smgr->getMesh("20kdm2.bsp");
ISceneNode* node2 = 0;
if (mesh2)
node2 = smgr->addOctTreeSceneNode(mesh2->getMesh(0), 0, -1, 128);
if (node2)
node2->setPosition(vector3df(-1300,-144,-1249));
//camera stuff
ICameraSceneNode* camera = smgr->addCameraSceneNode(0, vector3df(50,5,50), vector3df(0,0,0));
//load our controller class
CvIrrCamController* cam_control = new CvIrrCamController("haarcascade/haarcascade_frontalface_alt.xml");
//set it to control our camera
cam_control->setCamera(camera);
//start the webcam
cam_control->startWebcam();
//and this unless you dont want it
cam_control->ShowDebugWindow();
while(device->run())
{
int x, y;
//update the camera position based on head tracking
cam_control->UpdateCamPosition();
driver->beginScene(true, true, SColor(255,100,101,140));
//draw some lines for effect
/*
for(x=-200;x<=200;x+=50)
for(y=-200;y<=200;y+=50)
driver->draw3DLine(vector3df(x,y,200), vector3df(x,y,-200));
*/
smgr->drawAll();
driver->endScene();
}
device->drop();
return 0;
}