我要发帖 回复

中级会员

7

主题

223

积分

0

专家分

:

私信
发表时间 : 2008-9-16 17:04:41 | 浏览 : 1978    评论 : 4
写了一个基于MFC单文档的vp程序,
现在想通过鼠标随便点击窗口某处来获取vp场景中的三维坐标
现在的问题是鼠标点击窗口获取窗口的坐标(x,y)如何将它转换为三维场景中的三维
坐标(x,y,z)
思路是什么样子的?
有相关的例子么?有的话请给个!
我学习下
谢谢先

最近VR访客

squall 评论于2008-9-16 17:51:39
三维可以向二维转。二维不能向三维转吧?最后一维你变出来啊?
不过可以给你一个思路:
一个Object,空间坐标x、y、z,屏幕坐标m、n。
当你鼠标滑动时,有鼠标点a、b。
取得ab后,遍历所有object的mn,如果有接近的点,取该object的xyz。

没试过,也不知对不对。只是个思路。
tan_dunming 评论于2008-9-16 18:19:25
//在场景全部绘制完毕之后处理拾取,而且读取后缓冲
void ProcessPick(int mouseX, int mouseY)
{
glReadBuffer(GL_BACK);
GLint Viewport[4];
glGetIntegerv(GL_VIEWPORT, Viewport);
float fZValue = 0;
glReadPixels(mouseX,Viewport[3]-mouseY,      // 转换坐标
  1,1,                   //宽高都为1,即只读一个象素
  GL_DEPTH_COMPONENT,        //希望获得深度信息
  GL_FLOAT,                //浮点型
  &fZValue );                 //获得值保存在fZValue中 得到一个0~1之间的数

GLdouble ModelMatrix[16], ProjMatrix[16];
glGetDoublev(GL_MODELVIEW_MATRIX, ModelMatrix);
glGetDoublev(GL_PROJECTION_MATRIX, ProjMatrix);
gluUnProject(mouseX, Viewport[3]-mouseY,
  fZValue, ModelMatrix, ProjMatrix, Viewport,
  &ox, &oy, &oz);
}
追求卓越
waowao 评论于2008-9-17 16:10:47

先设一些标高层,这样在哪个层,点二维就出相应层的第三维坐标

先设一些标高层,这样在哪个层,点二维就出相应层的第三维坐标
menghewei 评论于2008-9-23 09:09:41
谢谢了!

手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2021-4-18 10:22 PM

返回顶部