coin3d 读取场景深度数据

用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);

请问楼主知道是什么原因吗