#include <opencv/cv.h>
#include <opencv/cxcore.h>
#include <opencv/highgui.h>
#include <osgViewer/Viewer>
#include <osg/ShapeDrawable>
#include <osg/TexEnv>
#include <osg/TexGen>
#include <osg/Texture2D>
#include <osgViewer/ViewerEventHandlers>
IplImage* pFrame = NULL;
CvCapture* pCapture = cvCreateCameraCapture(-1);
osg::ref_ptr<osg::Image> osgImage = new osg::Image;
osg::ref_ptr<osg::Geode> createGeode()
{
osg::ref_ptr<osg::Geode> geode = new osg::Geode;
osg::ref_ptr<osg::ShapeDrawable> shapeDrawable = new osg::ShapeDrawable;
osg::ref_ptr<osg::Box> box = new osg::Box();
shapeDrawable->setShape(box.get());
geode->addDrawable(shapeDrawable.get());
return geode.get();
}
class TextureCallback : public osg::StateAttributeCallback
{
public:
virtual void operator () (osg::StateAttribute* stateAttribute, osg::NodeVisitor* nv)
{
osg::Texture2D * texture = dynamic_cast<osg::Texture2D *>(stateAttribute->asTexture());
pFrame = cvQueryFrame(pCapture);
cvCvtColor(pFrame, pFrame, CV_BGR2RGB);
osgImage->setImage(pFrame->width, pFrame->height, 3, GL_RGB, GL_RGB, GL_UNSIGNED_BYTE, (unsigned char *)(pFrame->imageData), osg::Image::NO_DELETE,1);
texture->setImage(osgImage.get());
}
};
osg::ref_ptr<osg::StateSet> createStateSet(osg::ref_ptr<osg::Image> image)
{
osg::ref_ptr<osg::StateSet> stateSet = new osg::StateSet();
osg::ref_ptr<osg::Texture2D> texture = new osg::Texture2D;
texture->setImage(image.get());
texture->setUpdateCallback(new TextureCallback());
stateSet->setTextureAttributeAndModes(0, texture.get());
return stateSet.get();
}
int main( int argc, char** argv )
{
pFrame = cvQueryFrame(pCapture);
cvCvtColor(pFrame, pFrame, CV_BGR2RGB);
osgImage->setImage(pFrame->width, pFrame->height, 3, GL_RGB, GL_RGB, GL_UNSIGNED_BYTE, (unsigned char *)(pFrame->imageData), osg::Image::NO_DELETE,1);
osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
osg::ref_ptr<osg::Group> root = new osg::Group;
osg::ref_ptr<osg::Node> node = createGeode();
osg::ref_ptr<osg::StateSet> stateSet = createStateSet(osgImage.get());
node->setStateSet(stateSet);
root->addChild(node.get());
viewer->setSceneData(root.get());
viewer->addEventHandler(new osgViewer::StatsHandler);
viewer->setUpViewInWindow(0, 0, 800, 600);
viewer->run();
cvReleaseCapture(&pCapture);
return 0;
}
#include <opencv/cxcore.h>
#include <opencv/highgui.h>
#include <osgViewer/Viewer>
#include <osg/ShapeDrawable>
#include <osg/TexEnv>
#include <osg/TexGen>
#include <osg/Texture2D>
#include <osgViewer/ViewerEventHandlers>
IplImage* pFrame = NULL;
CvCapture* pCapture = cvCreateCameraCapture(-1);
osg::ref_ptr<osg::Image> osgImage = new osg::Image;
osg::ref_ptr<osg::Geode> createGeode()
{
osg::ref_ptr<osg::Geode> geode = new osg::Geode;
osg::ref_ptr<osg::ShapeDrawable> shapeDrawable = new osg::ShapeDrawable;
osg::ref_ptr<osg::Box> box = new osg::Box();
shapeDrawable->setShape(box.get());
geode->addDrawable(shapeDrawable.get());
return geode.get();
}
class TextureCallback : public osg::StateAttributeCallback
{
public:
virtual void operator () (osg::StateAttribute* stateAttribute, osg::NodeVisitor* nv)
{
osg::Texture2D * texture = dynamic_cast<osg::Texture2D *>(stateAttribute->asTexture());
pFrame = cvQueryFrame(pCapture);
cvCvtColor(pFrame, pFrame, CV_BGR2RGB);
osgImage->setImage(pFrame->width, pFrame->height, 3, GL_RGB, GL_RGB, GL_UNSIGNED_BYTE, (unsigned char *)(pFrame->imageData), osg::Image::NO_DELETE,1);
texture->setImage(osgImage.get());
}
};
osg::ref_ptr<osg::StateSet> createStateSet(osg::ref_ptr<osg::Image> image)
{
osg::ref_ptr<osg::StateSet> stateSet = new osg::StateSet();
osg::ref_ptr<osg::Texture2D> texture = new osg::Texture2D;
texture->setImage(image.get());
texture->setUpdateCallback(new TextureCallback());
stateSet->setTextureAttributeAndModes(0, texture.get());
return stateSet.get();
}
int main( int argc, char** argv )
{
pFrame = cvQueryFrame(pCapture);
cvCvtColor(pFrame, pFrame, CV_BGR2RGB);
osgImage->setImage(pFrame->width, pFrame->height, 3, GL_RGB, GL_RGB, GL_UNSIGNED_BYTE, (unsigned char *)(pFrame->imageData), osg::Image::NO_DELETE,1);
osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
osg::ref_ptr<osg::Group> root = new osg::Group;
osg::ref_ptr<osg::Node> node = createGeode();
osg::ref_ptr<osg::StateSet> stateSet = createStateSet(osgImage.get());
node->setStateSet(stateSet);
root->addChild(node.get());
viewer->setSceneData(root.get());
viewer->addEventHandler(new osgViewer::StatsHandler);
viewer->setUpViewInWindow(0, 0, 800, 600);
viewer->run();
cvReleaseCapture(&pCapture);
return 0;
}