Struct SceneDrawingContext

Source
pub struct SceneDrawingContext {
    pub lines: Vec<Line>,
}
Expand description

Drawing context for simple graphics, it allows you to draw simple figures using a set of lines. Most common use of the context is to draw some debug geometry in your game, draw physics info (contacts, meshes, shapes, etc.), draw temporary geometry in editor and so on.

This drawing context is meant to be used only for debugging purposes, it draws everything as set of lines and no solid faces supported.

It should be noted that the actual drawing is not immediate, provided methods just populate internal array of lines and it will be drawn on special render stage.

§Example

The usage of the drawing context is a bit unusual, at the beginning of the frame you should clear the contents of the context and only then call “drawing” methods. Otherwise, the internal buffer will increase in size to values which will take lots of time draw and the FPS will significantly drop with every frame until it reaches zero.

So typical usage would be:


fn draw_debug_objects(ctx: &mut SceneDrawingContext) {
    // Clear at the beginning of the frame.
    ctx.clear_lines();

    // Draw something.
    ctx.draw_cone(20, 1.0, 2.0, Matrix4::identity(), Color::WHITE, true);
}

You could avoid calling clear_lines in specific cases where your debug geometry is not changing, then the context could be populated once and rendered multiple times without any issues. Another case when you could not call clear_lines each frame, is “tracing” scenario - for example you may need to trace moving objects. In this case call clear_lines once in a few seconds, and you’ll see the “track” of moving objects.

§Rendering performance

The engine renders the entire set of lines in a single draw call, so it very fast - you should be able to draw up to few millions of lines without any significant performance issues.

Fields§

§lines: Vec<Line>

List of lines to draw.

Implementations§

Source§

impl SceneDrawingContext

Source

pub fn draw_frustum(&mut self, frustum: &Frustum, color: Color)

Draws frustum with given color.

Source

pub fn draw_aabb(&mut self, aabb: &AxisAlignedBoundingBox, color: Color)

Draws axis-aligned bounding box with given color.

Source

pub fn draw_oob( &mut self, aabb: &AxisAlignedBoundingBox, transform: Matrix4<f32>, color: Color, )

Draws object-oriented bounding box with given color.

Source

pub fn draw_transform(&mut self, matrix: Matrix4<f32>)

Draws transform as basis vectors.

Source

pub fn draw_triangle( &mut self, a: Vector3<f32>, b: Vector3<f32>, c: Vector3<f32>, color: Color, )

Draws a triangle by given points.

Source

pub fn draw_pyramid( &mut self, top: Vector3<f32>, a: Vector3<f32>, b: Vector3<f32>, c: Vector3<f32>, d: Vector3<f32>, color: Color, transform: Matrix4<f32>, )

Draws a pyramid by given points.

Source

pub fn draw_wire_sphere( &mut self, position: Vector3<f32>, radius: f32, segments: usize, color: Color, )

Draws a sphere as a set of three circles around each axes.

Source

pub fn draw_circle( &mut self, position: Vector3<f32>, radius: f32, segments: usize, transform: Matrix4<f32>, color: Color, )

Draws a circle at given world-space position with given radius. segments could be used to control quality of the circle.

Source

pub fn draw_circle_segment( &mut self, position: Vector3<f32>, radius: f32, segments: usize, begin_angle: f32, end_angle: f32, transform: Matrix4<f32>, color: Color, )

Draws a circle segment between two given angles. Center of the segment is defined by position, segments defines quality of the shape.

Source

pub fn draw_rectangle( &mut self, half_width: f32, half_height: f32, transform: Matrix4<f32>, color: Color, )

Draws a rectangle with given width and height.

Source

pub fn draw_sphere( &mut self, position: Vector3<f32>, slices: usize, stacks: usize, radius: f32, color: Color, )

Draws a wire sphere with given parameters.

Source

pub fn draw_sphere_section( &mut self, radius: f32, theta_range: Range<f32>, theta_steps: usize, phi_range: Range<f32>, phi_steps: usize, transform: Matrix4<f32>, color: Color, )

Draws a wire sphere with given parameters.

Source

pub fn draw_cone( &mut self, sides: usize, r: f32, h: f32, transform: Matrix4<f32>, color: Color, cap: bool, )

Draws a wire Y oriented cone where the tip is on +Y with given parameters.

Source

pub fn draw_cylinder( &mut self, sides: usize, r: f32, h: f32, caps: bool, transform: Matrix4<f32>, color: Color, )

Draws a wire cylinder with given parameters.

Source

pub fn draw_flat_capsule( &mut self, radius: f32, height: f32, segments: usize, transform: Matrix4<f32>, color: Color, )

Draws a flat capsule with given height and radius. segments defines quality of the shape.

Source

pub fn draw_capsule( &mut self, radius: f32, height: f32, transform: Matrix4<f32>, color: Color, )

Draws vertical capsule with given radius and height and then applies given transform.

Source

pub fn draw_segment_flat_capsule( &mut self, begin: Vector2<f32>, end: Vector2<f32>, radius: f32, segments: usize, transform: Matrix4<f32>, color: Color, )

Draws a flat capsule between two points with given radius. segments defines quality of the shape.

Source

pub fn draw_segment_capsule( &mut self, begin: Vector3<f32>, end: Vector3<f32>, radius: f32, v_segments: usize, h_segments: usize, transform: Matrix4<f32>, color: Color, )

Draws capsule between two points with given tesselation and then applies given transform to all points.

Source

pub fn draw_arrow( &mut self, sides: usize, color: Color, length: f32, radius: f32, transform: Matrix4<f32>, )

Draws an Y+ oriented arrow with the given parameters.

Source

pub fn add_line(&mut self, line: Line)

Adds single line into internal buffer.

Source

pub fn clear_lines(&mut self)

Removes all lines from internal buffer. For dynamic drawing you should call it every update tick of your application.

Trait Implementations§

Source§

impl Clone for SceneDrawingContext

Source§

fn clone(&self) -> SceneDrawingContext

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SceneDrawingContext

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl DebugRenderBackend for SceneDrawingContext

Source§

fn draw_line( &mut self, _object: DebugRenderObject<'_>, a: Point<f32>, b: Point<f32>, color: [f32; 4], )

Draws a colored line. Read more
Source§

fn filter_object(&self, _object: DebugRenderObject<'_>) -> bool

Predicate to filter-out some objects from the debug-rendering.
Source§

fn draw_polyline( &mut self, object: DebugRenderObject<'_>, vertices: &[OPoint<f32, Const<2>>], indices: &[[u32; 2]], transform: &Isometry<f32, Unit<Complex<f32>>, 2>, scale: &Matrix<f32, Const<2>, Const<1>, ArrayStorage<f32, 2, 1>>, color: [f32; 4], )

Draws a set of lines.
Source§

fn draw_line_strip( &mut self, object: DebugRenderObject<'_>, vertices: &[OPoint<f32, Const<2>>], transform: &Isometry<f32, Unit<Complex<f32>>, 2>, scale: &Matrix<f32, Const<2>, Const<1>, ArrayStorage<f32, 2, 1>>, color: [f32; 4], closed: bool, )

Draws a chain of lines.
Source§

impl DebugRenderBackend for SceneDrawingContext

Source§

fn draw_line( &mut self, _object: DebugRenderObject<'_>, a: Point<f32>, b: Point<f32>, color: [f32; 4], )

Draws a colored line. Read more
Source§

fn filter_object(&self, _object: DebugRenderObject<'_>) -> bool

Predicate to filter-out some objects from the debug-rendering.
Source§

fn draw_polyline( &mut self, object: DebugRenderObject<'_>, vertices: &[OPoint<f32, Const<3>>], indices: &[[u32; 2]], transform: &Isometry<f32, Unit<Quaternion<f32>>, 3>, scale: &Matrix<f32, Const<3>, Const<1>, ArrayStorage<f32, 3, 1>>, color: [f32; 4], )

Draws a set of lines.
Source§

fn draw_line_strip( &mut self, object: DebugRenderObject<'_>, vertices: &[OPoint<f32, Const<3>>], transform: &Isometry<f32, Unit<Quaternion<f32>>, 3>, scale: &Matrix<f32, Const<3>, Const<1>, ArrayStorage<f32, 3, 1>>, color: [f32; 4], closed: bool, )

Draws a chain of lines.
Source§

impl Default for SceneDrawingContext

Source§

fn default() -> SceneDrawingContext

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> AsyncTaskResult for T
where T: Any + Send + 'static,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Converts self reference as a reference to Any. Could be used to downcast a trait object to a particular type.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Converts self reference as a reference to Any. Could be used to downcast a trait object to a particular type.
Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> FieldValue for T
where T: 'static,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Casts self to a &dyn Any
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<R, P> ReadPrimitive<R> for P
where R: Read + ReadEndian<P>, P: Default,

Source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
Source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
Source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ScriptMessagePayload for T
where T: 'static + Send + Debug,

Source§

fn as_any_ref(&self) -> &(dyn Any + 'static)

Returns self as &dyn Any
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Returns self as &dyn Any
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ResourceLoadError for T
where T: 'static + Debug + Send + Sync,