我从网上搜索到代码,如下
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX, winY, winZ; 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, dModelview, projection, viewport, posX, posY, posZ); 但是,出现有2个问题:
1、我得到 世界坐标系(posX, posY, posZ)是不正确的!?
在没有任何旋转、平移的情况下,才可以得到
视景体远截面的正确的(posX, posY, posZ)2、另外,发现倒数第二个语句得到的深度值winZ 也总是 0 ??
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX, winY, winZ; 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, dModelview, projection, viewport, posX, posY, posZ); 但是,出现有2个问题:
1、我得到 世界坐标系(posX, posY, posZ)是不正确的!?
在没有任何旋转、平移的情况下,才可以得到
视景体远截面的正确的(posX, posY, posZ)2、另外,发现倒数第二个语句得到的深度值winZ 也总是 0 ??
http://dev.yesky.com/392/2123892.shtml
窗口初始化时,就把它们关联了! 另外,我并不是用VC实现的,不过还能看明白一些VC代码。
我搜索到您的2004年的一个回复,(http://topic.csdn.net/t/20040705/14/3146805.html)
我的代码跟你上面的回复相像(除了wglMakeCurrent和执行完gluUnProject的后续处理),
但是,我就是出不来正确的坐标 !?