Main Page   Modules   Namespace List   Class Hierarchy   Compound List   Namespace Members   Compound Members   Related Pages  

openvrml::bounding_sphere Class Reference

A bounding sphere. More...

Inheritance diagram for openvrml::bounding_sphere:

Inheritance graph
[legend]
Collaboration diagram for openvrml::bounding_sphere:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 bounding_sphere ()
 Construct.

virtual ~bounding_sphere ()
 Destroy.

virtual intersection intersect_frustum (const openvrml::frustum &frustum) const
 Intersect this bvolume with a frustum.

virtual void extend (const bounding_volume &b)
 Extend the bounding_volume to enclose bv.

virtual void extend (const vec3f &p)
 Extend to enclose p.

virtual void extend (const axis_aligned_bounding_box &b)
 Extend the bounding volume to enclose bbox.

virtual void extend (const bounding_sphere &b)
 Extend this bvolume to enclose the given sphere.

virtual void enclose (const std::vector< vec3f > &points)
 Enclose the given set of points.

virtual void maximize ()
 Extend the bounding sphere to infinity.

virtual bool maximized () const
 Whether the bounding_sphere is maximized.

virtual void ortho_transform (const mat4f &t)
 Orthographically transform the bounding_sphere by t.

virtual void transform (const mat4f &t)
 Transform the bounding_sphere by t.

void center (const vec3f &c)
 Set the center coordinates.

const vec3fcenter () const
 Get the center coordinates.

void radius (float r)
 Set the radius.

float radius () const
 Get the radius.


Private Attributes

vec3f center_
 The center of the sphere.

float radius_
 The radius of the sphere.


Detailed Description

A bounding sphere.

Bounding spheres are very fast to intersect test, but they are fairly loose. If asked to choose just one bounding volume, four out of five graphics professionals surveyed chose the bounding sphere for their patients who chewed bounding volumes.


Constructor & Destructor Documentation

openvrml::bounding_sphere::bounding_sphere  ) 
 

Construct.

openvrml::bounding_sphere::~bounding_sphere  )  [virtual]
 

Destroy.


Member Function Documentation

const vec3f & openvrml::bounding_sphere::center  )  const
 

Get the center coordinates.

Returns:
the center coordinates.

void openvrml::bounding_sphere::center const vec3f c  ) 
 

Set the center coordinates.

Parameters:
c new center coordinates.

void openvrml::bounding_sphere::enclose const std::vector< vec3f > &  points  )  [virtual]
 

Enclose the given set of points.

This resets the volume from any previous values.

Parameters:
points points.

Implements openvrml::bounding_volume.

void openvrml::bounding_sphere::extend const bounding_sphere &  b  )  [virtual]
 

Extend this bvolume to enclose the given sphere.

Parameters:
b a bounding sphere

Implements openvrml::bounding_volume.

void openvrml::bounding_sphere::extend const axis_aligned_bounding_box b  )  [virtual]
 

Extend the bounding volume to enclose bbox.

Todo:
Implement me!
Parameters:
bbox an axis-aligned bounding box

Implements openvrml::bounding_volume.

void openvrml::bounding_sphere::extend const vec3f p  )  [virtual]
 

Extend to enclose p.

Parameters:
p a point.

Implements openvrml::bounding_volume.

void openvrml::bounding_sphere::extend const bounding_volume b  )  [virtual]
 

Extend the bounding_volume to enclose bv.

Parameters:
bv a bounding volume.

Implements openvrml::bounding_volume.

bounding_volume::intersection openvrml::bounding_sphere::intersect_frustum const openvrml::frustum frustum  )  const [virtual]
 

Intersect this bvolume with a frustum.

The test assumes that the frustum is in the canonical looking-down-negative-z orientation, so the bounding volume is going to have to be transformed into the frustum's space. (Alternatives include transforming the frustum into the bounding volume's space, or transforming both of them into the projection space. Lots of tradeoffs involved, but transforming the bounding volume is probably the simplest approach overall.)

Parameters:
frustum the frustum.
Returns:
inside, outside, or partial.
See also:
bounding_volume::transform

bounding_volume::ortho_transform

Implements openvrml::bounding_volume.

void openvrml::bounding_sphere::maximize  )  [virtual]
 

Extend the bounding sphere to infinity.

Implements openvrml::bounding_volume.

bool openvrml::bounding_sphere::maximized  )  const [virtual]
 

Whether the bounding_sphere is maximized.

Returns:
true if the bounding_sphere has been maximized; false otherwise.

Implements openvrml::bounding_volume.

void openvrml::bounding_sphere::ortho_transform const mat4f t  )  [virtual]
 

Orthographically transform the bounding_sphere by t.

Parameters:
t transformation matrix.

Implements openvrml::bounding_volume.

float openvrml::bounding_sphere::radius  )  const
 

Get the radius.

Returns:
the radius.

void openvrml::bounding_sphere::radius float  r  ) 
 

Set the radius.

Parameters:
r new radius value.

void openvrml::bounding_sphere::transform const mat4f t  )  [virtual]
 

Transform the bounding_sphere by t.

Parameters:
t transformation matrix.

Implements openvrml::bounding_volume.


Member Data Documentation

openvrml::bounding_sphere::center_ [private]
 

The center of the sphere.

openvrml::bounding_sphere::radius_ [private]
 

The radius of the sphere.