A class for performing queries on a scene.
This is an abstract class for performing a query on a scene, i.e. to retrieve a list of objects and/or world geometry sections which are potentially intersecting a given region. Note the use of the word 'potentially': the results of a scene query are generated based on bounding volumes, and as such are not correct at a triangle level; the user of the SceneQuery is expected to filter the results further if greater accuracy is required.

Different SceneManagers will implement these queries in different ways to exploit their particular scene organization, and thus will provide their own concrete subclasses. In fact, these subclasses will be derived from subclasses of this class rather than directly because there will be region-type classes in between.

These queries could have just been implemented as methods on the SceneManager, however, they are wrapped up as objects to allow 'compilation' of queries if deemed appropriate by the implementation; i.e. each concrete subclass may precalculate information (such as fixed scene partitions involved in the query) to speed up the repeated use of the query.

You should never try to create a SceneQuery object yourself, they should be created using the SceneManager interfaces for the type of query required, e.g. SceneManager.CreateRaySceneQuery.

 public BspBrush(PlaneList planes, SceneQuery.WorldFragment fragment)
 {
     this.planes = planes;
     this.fragment = fragment;
 }
Example #2
0
			public bool OnQueryResult( SceneQuery.WorldFragment fragment )
			{
				// don't deal with world fragments by default
				return true;
			}
Example #3
0
		bool Axiom.Core.IIntersectionSceneQueryListener.OnQueryResult( MovableObject obj, SceneQuery.WorldFragment fragment )
		{
			// create an entry and add it to the cached result list
			this.lastResults.Objects2World.Add( new SceneQueryMovableObjectWorldFragmentPair( obj, fragment ) );

			// continue gathering results
			return true;
		}
Example #4
0
		bool IRaySceneQueryListener.OnQueryResult( SceneQuery.WorldFragment fragment, float distance )
		{
			// create an entry and add it to the cached result list
			var entry = new RaySceneQueryResultEntry();
			entry.Distance = distance;
			entry.SceneObject = null;
			entry.worldFragment = fragment;
			this.lastResults.Add( entry );

			// continue gathering results
			return true;
		}
 public SceneQueryMovableObjectWorldFragmentPair(MovableObject obj, SceneQuery.WorldFragment fragment)
 {
     this.obj = obj;
     this.fragment = fragment;
 }
Example #6
0
		public bool OnQueryResult( SceneQuery.WorldFragment fragment, float distance )
		{
			throw new NotImplementedException();
		}
 public bool OnQueryResult(SceneQuery.WorldFragment fragment, float distance)
 {
     camera.Position = new Vector3(camera.Position.x, fragment.SingleIntersection.y + 2.0f, camera.Position.z);
     return false;
 }