我要发帖 回复

正式会员

19

主题

71

积分

0

专家分

:

私信
发表时间 : 2008-12-16 10:59:31 | 浏览 : 1115    评论 : 3
vega中有个二维坐标转三维坐标的函数:void  vgGetChanScreenToWorld (vgChannel *chan, float sx, float sy, float sz, float *x, float *y, float *z);  
请问其中的深度值sz怎么求啊?
用glReadPixels( sx, sy , 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ );求出来好像是归一化后的深度值,不过所请求的sx sy好像是正确的,那么归一化之前的深度值sz该怎么求呢,谢谢!

最近VR访客

relax 评论于2008-12-16 11:15:10
公式里sz不能取任意值的,不然求出来的三维坐标会不正确,opengl是对原来的深度值做了一个归一化的矩阵变化,readpixel求出来的是归一化之后的0-1之间的一个值,关于这个归一化的公式我查了一些资料,http://dev.gameres.com/Program/Visual/3D/shenruTS.htm利用OpenGL实现屏幕坐标与世界坐标
那个公式我带进去计算了一下,发现用vgscreentoworld计算出来的世界坐标x y 基本是正确的,但是z值有几十的偏差,我的近裁剪面是1  远裁剪面是20000,是不是精度不够所以才导致计算出来的结果有偏差呢
relax 评论于2008-12-16 20:17:52
哦 刚才看到vega自带的man pages文档里说vgGetChanScreenToWorld里的参数sz是被忽略的:
Known Bugs
Channels which are dynamically created will not render clouds which were created before the channel was created with vgNewChan.
The parameter sz to vgGetChanScreenToWorld is ignored. Instead, 0.75 is used for the normalized screen z coordinate
huxiaobo 评论于2010-3-25 19:52:34
看看学习下

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

GMT+8, 2020-10-27 10:56 AM

返回顶部