用coin3D 的SoOffScreenRenderer类的对象渲染场景后,再用opengl函数glReadPixels来读取深度数据,但是根本没有作用,但是同样的代码在open Inventor里是可以的,就想问有没有人碰到过类似的问题,下面就是一个例子的代码:
int _tmain(int , char **argv)
{
HWND window = SoWin::init(argv[0]);
if (window==NULL) exit(1);
int width=640;
int height=480;
SoWinExaminerViewer * viewer = new SoWinExaminerViewer(window);
SbVec2s size;
size.setValue(640,480);
viewer->setSize(size);
SoOffscreenRenderer *m_Render=new SoOffscreenRenderer(viewer->getViewportRegion());
m_Render->setBackgroundColor(SbColor(0.0f,0.0f,0.0f));
SoSeparator * root = new SoSeparator;
SoCone * cone = new SoCone;
root->ref();
root->addChild(cone);
m_Render->render(root);
IplImage *m_Depth=NULL;
m_Depth=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,1);
float* _Depth=(float*)m_Depth->imageData;
glReadPixels(0,0,640,480,GL_DEPTH_COMPONENT,GL_FLOAT,_Depth);
IplImage *m_RenderDepthReal= cvCreateImage(cvSize(640,480), IPL_DEPTH_8U, 1);
char* _DepthImg= m_RenderDepthReal->imageData;
for (int i= 0; i< height; i++)
{
_DepthImg= m_RenderDepthReal->imageData+ (height-i-1)* width;//从图像左上角开始遍历图像
for (int j= 0; j< width; j++)
{
float _Cur= _Depth[i*width+j];
_DepthImg[j]= (char)((_Cur)* 255);
}
}
viewer->setSceneGraph(root);
viewer->show();
//myCamera->viewAll(root,m_Manager->getViewportRegion(),2.0);
SoWin::show(window);
SoWin::mainLoop();
delete viewer;
root->unref();
return 0;
}
的代码在open Inventor里是可以的,就想问有没有人碰到过类似的问题,下面就是一个例子的代码:
int _tmain(int , char **argv)
{
HWND window = SoWin::init(argv[0]);
if (window==NULL) exit(1);
int width=640;
int height=480;
SoWinExaminerViewer * viewer = new SoWinExaminerViewer(window);
SbVec2s size;
size.setValue(640,480);
viewer->setSize(size);
SoOffscreenRenderer *m_Render=new SoOffscreenRenderer(viewer->getViewportRegion());
m_Render->setBackgroundColor(SbColor(0.0f,0.0f,0.0f));
SoSeparator * root = new SoSeparator;
SoCone * cone = new SoCone;
root->ref();
root->addChild(cone);
m_Render->render(root);
IplImage m_Depth=NULL;
m_Depth=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,1);
float _Depth=(float*)m_Depth->imageData;
glReadPixels(0,0,640,480,GL_DEPTH_COMPONENT,GL_FLOAT,_Depth);
请问楼主知道是什么原因吗