我从网上搜索到代码,如下
     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 ??

解决方案 »

  1.   

    基于VC++的OpenGL编程讲座之坐标变换:
    http://dev.yesky.com/392/2123892.shtml
      

  2.   

    建议楼主看看其中讲述的转换原理以及使用到的转换API ~
      

  3.   

    syy64(太平洋),   这个有影响吗?因为我的程序只有一个DC接受RC的输出,所以,
       窗口初始化时,就把它们关联了!   另外,我并不是用VC实现的,不过还能看明白一些VC代码。
       我搜索到您的2004年的一个回复,(http://topic.csdn.net/t/20040705/14/3146805.html)
       我的代码跟你上面的回复相像(除了wglMakeCurrent和执行完gluUnProject的后续处理),
       但是,我就是出不来正确的坐标 !?