求助!关于opengl下物体坐标的获取。

MSAD 2003-12-12 10:29:33
用opengl画了几个物体。先通过鼠标指定物体,并得到该物体的x、y、z三个坐标,该怎样办?
...全文
78 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
UPCCPU 2003-12-24
up
  • 打赏
  • 举报
回复
mycug 2003-12-23
可以通过获取深度缓冲的办法进行射线与实体的求交操作, 然后由之实现拾取.
如有不明之处, 邮件联系! mycug@sina.com
  • 打赏
  • 举报
回复
castle64 2003-12-23
使用名称堆栈的方法就可以pick物体
  • 打赏
  • 举报
回复
wjj888888 2003-12-12
在OGL下,进行物件选择时,通常有两种方法。

1,OGL内建的名称堆栈(glPushName(), glLoadName() )。在Red Book等OGL教程中查找“Selection and Feedback ”(选择与反馈)便可找到,这里不再阐述。

2,RayPicking。其原理在我上传的pdf里,另外在DX的SDK里有一个pick的例子。不过OGL提供了一个函数gluUnProject(),可以省去对矩阵的计算。函数的定义请自行查找,这里我给出一个简单的Picking函数,供大家参考。(ATVECTOR是自定义的一个矢量类)

void PickRay(POINT CursorPos, ATVECTOR &RayStar, ATVECTOR &RayEnd)
{
GLdouble o1x,o1y,o1z;
GLdouble o2x,o2y,o2z;

GLdouble ModelMatrix[16], ProjMatrix[16];
glGetDoublev(GL_MODELVIEW_MATRIX, ModelMatrix);
glGetDoublev(GL_PROJECTION_MATRIX, ProjMatrix);

GLint Viewport[4];
glGetIntegerv(GL_VIEWPORT, Viewport);

gluUnProject(CursorPos.x, WINDOW_HEIGHT - CursorPos.y, 0.0, ModelMatrix, ProjMatrix, Viewport, &o1x, &o1y, &o1z);
gluUnProject(CursorPos.x, WINDOW_HEIGHT - CursorPos.y, 1.0, ModelMatrix, ProjMatrix, Viewport, &o2x, &o2y, &o2z);

RayStar = ATVECTOR((GLfloat)o1x, (GLfloat)o1y, (GLfloat)o1z);
RayEnd = ATVECTOR((GLfloat)o2x, (GLfloat)o2y, (GLfloat)o2z);

}



  • 打赏
  • 举报
回复
相关推荐
发帖
图形处理/算法
加入

1.9w+

社区成员

VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
申请成为版主
帖子事件
创建了帖子
2003-12-12 10:29
社区公告
暂无公告