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

MSAD 2003-12-12 10:29:33
用opengl画了几个物体。先通过鼠标指定物体,并得到该物体的x、y、z三个坐标,该怎样办?
...全文
123 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
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);

}



19,471

社区成员

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

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