opengl深度测试

kuramawzw 2009-05-25 10:24:33
我现在有一个三角网格模型,我现在想生成某一视点下深度图,启用opengl深度测试功能,然后从深度缓存中读取深度,深度值全为1,不正确啊,下面附我的opengl显示部分代码,望各位大哥帮忙看下(我的模型能够正确显示).
void redrawDepth()
{


ViewPort port;
xform modeview;
xform projection;
point center;
readCameraPar("model\\1\\camera1.in",port,center,modeview,projection);//我的投影矩阵,视图模型矩阵是先已经有了


GLfloat light_pos[4] = { center[0], center[1], center[2], 0.0 };
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// glEnable(GL_LIGHTING);//我只生成深度,不启用光照
//glLightfv(GL_LIGHT0, GL_POSITION, light_pos);
//glEnable(GL_LIGHT0);
glDisable(GL_BLEND);
glEnable(GL_DEPTH_TEST);


//载入我自己的投影,视图矩阵
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMultMatrixd(modeview);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMultMatrixd(projection);



glColor3f(0,1,0);
mesh->drawTrigleMesh();//画三角模型glBegin(GL_TRIANGLES);顶点坐标glEnd();





glutSwapBuffers();

//读取深度
IplImage * depthmap=cvCreateImage(cvSize(port.width,port.hegith),IPL_DEPTH_8U,1);
float * depth=new float[port.width*port.hegith];
glReadPixels(0,0,port.width,port.hegith,GL_DEPTH_COMPONENT,GL_FLOAT,depth);//读取深度
for(int i=0;i<port.width*port.hegith;i++)
depthmap->imageData[i]=static_cast<unsigned short>((depth[i]*256)/256);
delete [] depth;
cvSaveImage("model\\1\\1d.bmp",depthmap);
cvReleaseImage(&depthmap);



}
...全文
922 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
IONPhantom 2009-05-26
  • 打赏
  • 举报
回复
OGL下不太清楚,在D3D下Z Test和Z Write是两个独立的设置,Z Test光比较,Z Write才是写深度缓冲.glEnable(GL_DEPTH_TEST)是两个都打开么?
zwqxin 2009-05-26
  • 打赏
  • 举报
回复
GL_FLOAT...你是想用浮点纹理来装? 你要先确定自己的显卡支持喔.否则还是会变成GL_UNSIGNED_INT的
还有就是1楼说的那里, 8BIT的BMP图片每个像素用一个BYTE(/SHORT)来装, BYTE的范围是0-255,也就是灰度级,不需要映射到(0,1)了
菜牛 2009-05-25
  • 打赏
  • 举报
回复
depthmap->imageData[i]=static_cast <unsigned short>((depth[i]*256)/*/256*/); 

19,464

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧