/usr/include/libwildmagic/Wm5Culler.h is in libwildmagic-dev 5.13-1ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | // Geometric Tools, LLC
// Copyright (c) 1998-2014
// Distributed under the Boost Software License, Version 1.0.
// http://www.boost.org/LICENSE_1_0.txt
// http://www.geometrictools.com/License/Boost/LICENSE_1_0.txt
//
// File Version: 5.0.1 (2010/10/01)
#ifndef WM5CULLER_H
#define WM5CULLER_H
#include "Wm5GraphicsLIB.h"
#include "Wm5Camera.h"
#include "Wm5Spatial.h"
#include "Wm5VisibleSet.h"
namespace Wm5
{
class WM5_GRAPHICS_ITEM Culler
{
public:
// Construction and destruction. Culling requires a camera model. If the
// camera is not passed to the constructor, you should set it using
// SetCamera before calling ComputeVisibleSet.
Culler (const Camera* camera = 0);
virtual ~Culler ();
// Access to the camera, frustum copy, and potentially visible set.
inline void SetCamera (const Camera* camera);
inline const Camera* GetCamera () const;
void SetFrustum (const float* frustum);
inline const float* GetFrustum () const;
inline VisibleSet& GetVisibleSet ();
// The base class behavior is to append the visible object to the end of
// the visible set (stored as an array). Derived classes may override
// this behavior; for example, the array might be maintained as a sorted
// array for minimizing render state changes or it might be/ maintained
// as a unique list of objects for a portal system.
virtual void Insert (Spatial* visible);
// Access to the stack of world culling planes. You may push and pop
// planes to be used in addition to the view frustum planes. PushPlane
// requires the input plane to be in world coordinates. See the comments
// before data member mPlaneState about the bit system for enabling and
// disabling planes during culling.
enum { MAX_PLANE_QUANTITY = 32 };
inline int GetPlaneQuantity () const;
inline const HPlane* GetPlanes () const;
inline void SetPlaneState (unsigned int planeState);
inline unsigned int GetPlaneState () const;
inline void PushPlane (const HPlane& plane);
inline void PopPlane ();
// Compare the object's world bound against the culling planes. Only
// Spatial calls this function.
bool IsVisible (const Bound& bound);
// Support for Portal::GetVisibleSet.
bool IsVisible (int numVertices, const APoint* vertices,
bool ignoreNearPlane);
// Support for BspNode::GetVisibleSet. Determine whether the view frustum
// is fully on one side of a plane. The "positive side" of the plane is
// the half space to which the plane normal points. The "negative side"
// is the other half space. The function returns +1 if the view frustum
// is fully on the positive side of the plane, -1 if the view frustum is
// fully on the negative side of the plane, or 0 if the view frustum
// straddles the plane. The input plane is in world coordinates and the
// world camera coordinate system is used for the test.
int WhichSide (const HPlane& plane) const;
// This is the main function you should use for culling within a scene
// graph. Traverse the scene graph and construct the potentially visible
// set relative to the world planes.
void ComputeVisibleSet (Spatial* scene);
protected:
// The input camera has information that might be needed during the
// culling pass over the scene.
const Camera* mCamera;
// A copy of the view frustum for the input camera. This allows various
// subsystems to change the frustum parameters during culling (for
// example, the portal system) without affecting the camera, whose initial
// state is needed by the renderer.
float mFrustum[Camera::VF_QUANTITY];
// The world culling planes corresponding to the view frustum plus any
// additional user-defined culling planes. The member m_uiPlaneState
// represents bit flags to store whether or not a plane is active in the
// culling system. A bit of 1 means the plane is active, otherwise the
// plane is inactive. An active plane is compared to bounding volumes,
// whereas an inactive plane is not. This supports an efficient culling
// of a hierarchy. For example, if a node's bounding volume is inside
// the left plane of the view frustum, then the left plane is set to
// inactive because the children of the node are automatically all inside
// the left plane.
int mPlaneQuantity;
HPlane mPlane[MAX_PLANE_QUANTITY];
unsigned int mPlaneState;
// The potentially visible set for a call to GetVisibleSet.
VisibleSet mVisibleSet;
};
#include "Wm5Culler.inl"
}
#endif
|