查看: 2067|回复: 2

谁能告诉我剪裁坐标的取值范围和涵义,急等

[复制链接]

该用户从未签到

发表于 2009-4-4 12:29:10 | 显示全部楼层 |阅读模式
空间点坐标经过模型视图矩阵和投影矩阵的变换,得到剪裁坐标,再经过视口变换得到屏幕像素坐标
设一个点对应的剪裁坐标是(x,y,z,1),
则x,y似乎对应的是视口的X,Y坐标,取值范围(-1,1);
而z应该是对应该点的深度值了,不过经过实际计算观察,这个值很怪异:当顶点在相机后方时,z为类似1.00xx的值;当顶点沿视线正方向运动时,z从0.9xxx向1.00098变化。。。
这样的结果让我很是迷惑,裁剪坐标(x,y,z,1)的z是否对应的深度值呢?改值的取值范围是怎样的呢?
希望有了解的朋友能够不吝赐教,或者能给提供一些相关的书籍或链接,不胜感谢!

该用户从未签到

发表于 2009-4-4 23:10:26 | 显示全部楼层
z应该是深度值,变化范围通常在0-1之间。我并不了解您得出上述计算结果时所使用的实验环境和代码,因此抱歉暂时不能针对您遇到的问题提供更多帮助

该用户从未签到

 楼主| 发表于 2009-4-6 21:24:16 | 显示全部楼层
我的计算过程如下,实际就是把OpenGL管线的顶点坐标变换自己做了一下,得到点的裁剪坐标:
// 相机固定在世界坐标系的原点,视线朝向Y轴正方向
// 作用在顶点上的变换矩阵
osg::Matrix matVP = _view->getCamera()->getViewMatrix() * _view->getCamera()->getProjectionMatrix();
// 改变y值,取视线方向上的一系列点
osg::Vec4 v(0, y, 0, 1);        
// 应用变换矩阵,得到裁剪坐标
v = matVP.preMult(v);
if (v._v[3] == 0)        return; // 无穷远点
// 透视除法,得到对应的三维点
v /= v._v[3];

按照红宝书中所讲,最终得到的v(x,y,z),三维分量的取值范围都在[-1,1]

经过实际测试,其中x,y的取值范围确实在[-1,1],0点在视口中心
而z的取值却比较奇怪,没有弄明白它与深度的关系,这也是我想问的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表