Esempio n. 1
0
void OctreeNode::GetVisibleSceneNodes(SceneNodeList & list, Camera * cam)
{
    _node * mynode = m_head;

    while (mynode)
    {
        SceneNode * node = mynode->node;
        const Aabb & bound = node->GetWorldAabb();

        if (node->IsVisible() && cam->IsVisible(bound))
        {
            list.PushBack(node);
        }

        mynode = mynode->next;
    }
}
Esempio n. 2
0
void OctreeNode::GetSceneNodesInSphere(SceneNodeList & list, const Sphere & sph)
{
    _node * head = m_head;

    while (head)
    {
        SceneNode * node = head->node;
        const Aabb & aabb = node->GetWorldAabb();

        if (Math::AABBIntersection(aabb, sph) == 0)
        {
            list.PushBack(node);
        }

        head = head->next;
    }
}
Esempio n. 3
0
	void Water::_OnOptimizeCullResult(Event * _sender)
	{
		VisibleCullResult * result = (VisibleCullResult *)_sender->GetParam(0);

		SceneNodeList & list = result->nodes;

		SceneNodeList::Iterator whr = list.Begin();
		SceneNodeList::Iterator end = list.End();

		while (whr != end)
		{
			SceneNode * node = *whr;

			Vec3 pos = node->GetWorldAabb().GetCenter();

			if (!HasWater(pos.x, pos.z))
				node->_setVisibleMask(false);

			++whr;
		}
	}
Esempio n. 4
0
void OctreeNode::RayTracing(const Ray & ray, float dist, Array<Scene::TraceInfo> & nodes, int flag)
{
    _node * head = m_head;

    while (head)
    {
        SceneNode * node = head->node;

        if (node->GetFlag().TestAny(flag))
        {
            RayIntersectionInfo info;

            const Aabb & aabb = node->GetWorldAabb();
            Math::RayIntersection(info, ray, aabb);
            if (info.iterscetion == TRUE && info.distance >= 0 && info.distance <= dist)
            {
				Scene::TraceInfo tinfo = { node, info.distance };
                nodes.PushBack(tinfo);
            }
        }

        head = head->next;
    }
}