在opengl中如何正确得到屏幕坐标的三维坐标值?(分不够再加)

key306 2003-06-15 10:29:35
我是opengl的初学者,一直不明白这个问题。翻阅了一些资料,知道要使用gluUnProject函数,也试着实现了一下,但是总是得不到正确的三维坐标值。
程序的开始看着坐标值还不错挺符合得。就是对场景进行相应的旋转和平移等操作后,得到的坐标值就有很大的偏差了,不知道是怎么回事,请高手给出详尽的回答,谢谢!!!
...全文
95 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
key306 2003-06-19
  • 打赏
  • 举报
回复
自己解决了,不过还要谢谢davidlxm(davidlxm) !!!
key306 2003-06-16
  • 打赏
  • 举报
回复
难道csdn上没有人能讲清楚这问题?
还是问题太弱了,都懒的回答啊,大家给个回应啊!
davidlxm 2003-06-16
  • 打赏
  • 举报
回复
你能确定glGetDoublev得到modelView和projection的矩阵正好是你使用例如glVertex3f等函数时的矩阵码?在glBegin之前调用glGetDoublev取得矩阵,用这个矩阵去gluUnproject。如果glPop以后取得矩阵,结果肯定不对了。

顶点坐标 * modelView * projection 就是view坐标
view坐标 * projection的逆矩阵 * modelView的逆矩阵就是原始的定点坐标

如果其中任何一个部分变化,结果就会不一样。
key306 2003-06-15
  • 打赏
  • 举报
回复
拜托,大家看一下,在线等待。。。
key306 2003-06-15
  • 打赏
  • 举报
回复
麻烦各位大侠再看看这个问题,确实等着用啊!
key306 2003-06-15
  • 打赏
  • 举报
回复
我不知道如何正确的设置winz的参数?
modelview和projMatrix都是通过glGetDoublev得到的,viewport是使用glGetIntegerv得到的。不知道这样是不是正确?
另外,你说的“如果vertor3是通过project然后unproject的结果肯定是正确的”是怎么回事,我不太明白?
能不能再解释的详细一点,如果有时间给个小例子更好了,有劳了!!!
谢谢!!!
davidlxm 2003-06-15
  • 打赏
  • 举报
回复
你能确定,winz的参数正确吗?通常unproject的问题出在winz,此参数比较难取,如果vertor3是通过project然后unproject的结果肯定是正确的(确保modelView和projection矩阵可逆),还有确定你给的矩阵是当时顶点变换时的矩阵。

4,448

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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