码迷,mamicode.com
首页 > 其他好文 > 详细

Ogre bsp场景管理笔记

时间:2015-04-26 19:29:44      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:

1.用到的知识点

  如何判断点在平面哪一边? 以及判断aabb盒子在面的哪一边?

   Real Plane::getDistance (const Vector3& rkPoint) const
    {
        return normal.dotProduct(rkPoint) + d;
    }
    //-----------------------------------------------------------------------
    Plane::Side Plane::getSide (const Vector3& rkPoint) const
    {
        Real fDistance = getDistance(rkPoint);

        if ( fDistance < 0.0 )
            return Plane::NEGATIVE_SIDE;

        if ( fDistance > 0.0 )
            return Plane::POSITIVE_SIDE;

        return Plane::NO_SIDE;
    }

  Plane::Side Plane::getSide (const Vector3& centre, const Vector3& halfSize) const
  {
    // Calculate the distance between box centre and the plane
    Real dist = getDistance(centre);


    // Calculate the maximise allows absolute distance for
    // the distance between box centre and plane
    Real maxAbsDist = normal.absDotProduct(halfSize);


    if (dist < -maxAbsDist)
      return Plane::NEGATIVE_SIDE;


    if (dist > +maxAbsDist)
      return Plane::POSITIVE_SIDE;


    return Plane::BOTH_SIDE;
  }



2. 如何获取可见节点

  1.获取相机所在的叶子节点

  BspNode* cameraNode = mLevel->findLeaf(camera->getDerivedPosition());

  查找体现出了bsp的特性,根据节点的分割面,定位相机所在的节点

  2.找到相机所在的节点后,根据PVS获取从该节点处可看到节点的。

    portal技术,由于笔者也不会,不做介绍。

3. 总结

  Ogre 的bsp scenemanager 主要是基于quake的bsp。 是基于室内的场景管理, 一个节点相当于一个房间,通过Cluster

  可查到在该房间内可以看到的其它房间。 而通过bsp可以快速查找相机所在的房间。

  以上纯属笔者自己见解,如有错误,欢迎谈讨 :)

  

 

Ogre bsp场景管理笔记

标签:

原文地址:http://www.cnblogs.com/duzib/p/4457457.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!