首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

openGL中取得屏幕坐标对应的三维场景坐标时出现的有关问题!无法取得当前视口,视图,投影矩阵

2012-02-24 
openGL中取得屏幕坐标对应的三维场景坐标时出现的问题!无法取得当前视口,视图,投影矩阵!小弟在做一个程序,

openGL中取得屏幕坐标对应的三维场景坐标时出现的问题!无法取得当前视口,视图,投影矩阵!
小弟在做一个程序,需要鼠标点取屏幕上一点,得到此点在openGL场景坐标里的三维数据。

写了一个函数如下:
//由屏幕上鼠标坐标点取得对应的场景坐标点   放在object_x,object_y,object_z中
void   getGlPos_ZBuffer(int   mouse_x,   int   mouse_y,   double   object_x,   double   object_y,   double   object_z)  
{  
glClearDepth(1.0f);                         //     深度缓存设置
                  glEnable(GL_DEPTH_TEST);               //     打开深度测试
                  glDepthFunc(GL_LEQUAL);                 //     设置深度测试类型


GLint   t_viewport[4]   =   {0,0,0,0};
GLdouble   t_modelview[16];  
GLdouble   t_projection[16];  
GLfloat   winX,   winY,   winZ;  

glPushMatrix();

glGetIntegerv(GL_VIEWPORT,   t_viewport);//视口
glGetDoublev(GL_MODELVIEW_MATRIX,   t_modelview);//视图矩阵
glGetDoublev(GL_PROJECTION_MATRIX,   t_projection);//投影矩阵

glPopMatrix();

winX=(float)mouse_x;//OGL中的窗口x坐标
winY=(float)t_viewport[3]-(float)mouse_y;//OGL中的窗口y坐标
glReadPixels(mouse_x,//x坐标
  int(winY),//y坐标
1,1,//读取一个像素
GL_DEPTH_COMPONENT,//获得深度信息
GL_FLOAT,//数据类型为浮点型
&winZ);//获得的深度值保存在winZ中
gluUnProject((GLdouble)winX,(GLdouble)winY,(GLdouble)winZ,t_modelview,t_projection,t_viewport,&object_x,&object_y,&object_z);
}  

但是
glGetIntegerv(GL_VIEWPORT,   t_viewport);//视口
函数执行以后t_viewport的值没有变化,还是原来的值0。

glGetDoublev(GL_MODELVIEW_MATRIX,   t_modelview);//视图矩阵
glGetDoublev(GL_PROJECTION_MATRIX,   t_projection);//投影矩阵
两个函数的值也没有变化。

我已经开了深度缓存
glClearDepth(1.0f);                         //     深度缓存设置
                  glEnable(GL_DEPTH_TEST);               //     打开深度测试
                  glDepthFunc(GL_LEQUAL);                 //     设置深度测试类型

请问上述问题是什么原因?
是由于深度缓存函数设置不对导致无法读深度缓存里的值?
还是与投影方式有关?(我用的是透视投影)
或者是我用的opengl库版本不对?(顺便问一下glGetIntegerv函数在哪个库里)?

多谢大家啦~


[解决办法]
// 释放OpenGL绘制描述表
//wglMakeCurrent(NULL,NULL);
大概是这个函数在作怪,我就是说,你的OpenGL上下文已经被释放掉了。把所有这样的一行注消除试试看

http://www.physdev.com/phpbb/cms_view_article.php?aid=22&sid=418cfc3915a4f469cb7d50db1c929160

热点排行