glReadPixels 取值问题

来源:百度知道 编辑:UC知道 时间:2024/06/09 06:47:01
CVector3 GetOGLPos(int x, int y){

GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX, winY, winZ;
GLdouble posX, posY, posZ;

glGetDoublev( GL_MODELVIEW_MATRIX, modelview );
glGetDoublev( GL_PROJECTION_MATRIX, projection );
glGetIntegerv( GL_VIEWPORT, viewport );

winX = (float)x;
winY = (float)viewport[3] - (float)y;
glReadPixels( x, int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ );

gluUnProject( winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ );

return CVector3(posX,posY,posZ);
}

...
glClear(GL_COLOR_BUFFER_BIT);

gluLookAt( 0.0, 0.0, -1.0,
0.0, 0.0, -100.0,
0.0, 1.0, 0.0 );

glTranslatef(0.0f, 0.0f, -25.0f);

CVector3 bottomLeft = GetOGLPos(50,50);

...

问题是无法成功取到深度值?请懂的帮忙我分析原因。先谢谢了!
问题已经演变成:
<

在以下三个函数::
glGetDoublev( GL_MODELVIEW_MATRIX, modelview );
glGetDoublev( GL_PROJECTION_MATRIX, projection );
glGetIntegerv( GL_VIEWPORT, viewport );
执行之前需要再执行一下模型的视图变换操作.