glReadPixels 取值问题

JianZhang_Sdocker 2009-03-06 02:12:25

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);

...

问题是无法成功取到深度值?请懂的帮忙我分析原因。先谢谢了!
...全文
130 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
JianZhang_Sdocker 2009-03-07
  • 打赏
  • 举报
回复
现在请教一下游戏UI图片绘制的原理,我有两个想法:

第一种:人肉计算出视口的世界坐标,然后绘制。
第二种:在画完三维物体后,跟换投影信息到2维做图,然后绘制。

请教有经验的人哪种思路正确。如果是第一种,貌似没有像gluUnProject()计算屏幕坐标对应世界坐标这样的函数来计算视口的世界坐标,得有一种逻辑算法,是否可告诉我?如果是第二种的话,是否也可以贴上一些代码,让我参考参考。

先谢过大家了。
zzz822163 2009-03-07
  • 打赏
  • 举报
回复
UI不需要自己弄吧,可以用专门的框架,dxut或者cegui,用起来都很简单

19,464

社区成员

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

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