|
楼主 |
发表于 2012-11-6 08:55:14
|
显示全部楼层
本帖最后由 dqshenfiw 于 2012-11-6 09:04 编辑
array 发表于 2012-11-5 10:09
我手头暂时没有书所以不知道您说的p268是什么内容,请给出具体的代码信息
还有我叫王锐,请正确拼写我的名 ...
sorry,王锐大哥。。。。
代码如下:
struct LessDepthSortFunctor
{
LessDepthSortFunctor( const osg::Matrix& matrix )
{ _frontVector.set(-matrix(0,2), -matrix(1,2), -matrix(2,2), -matrix(3,2)); }//这里为什么取的负值?
bool operator()( const CloudCell& lhs, const CloudCell& rhs ) const
{ return getDepth(lhs._pos) > getDepth(rhs._pos); }
float getDepth( const osg::Vec3d& pos ) const
{
return (float)pos[0] * _frontVector[0] +
(float)pos[1] * _frontVector[1] +
(float)pos[2] * _frontVector[2] + _frontVector[3];
}
osg::Vec4 _frontVector;
};
这个结构体用在了std::sort中,做的应该是让点云数据按照视点位置做降序的深度排序,以便将点云从远到近做混合叠加;
我不明白的是中间取相机前方向量这个地方,matrix取的是modelviewMatrix,按照opengl的解释,似乎matrix(0,2),matrix(1,2), matrix(2,2), matrix(3,2)所指向量就是前向的向量了,不明白为什么这里会取负值 |
|