Struct rustic_zen::scene::Segment

source ·
pub struct Segment<R: Rng> { /* private fields */ }
Expand description

Segments represent boundries in space for light rays to interact with.

These are the primitive type that scenes are constructed from in rustic zen, and can be in the form of straight lines or 2nd order Bezier curves.

To create dynamic and interesting scenes segments are not constructed from static points, but instead SamplerPoints, which are a wrapper around two of rustic zen’s Sampler objects. (one for x and one for y).

As SamplerPoints do not have a constructor, construction is indirect via a tuple of Samplers.

§Example:

use rustic_zen::prelude::*;

let m = material::hqz_legacy_default();

// Construct SamplerPoints in place from a tuple of Samplers.
let l =Segment::line_from_points(
    (Sampler::new_const(0.0),Sampler::new_const(0.0)),
    (Sampler::new_const(10.0),Sampler::new_const(10.0)),
    m.clone()
);

// Samplers also support being constructed in place though so this can be simplified to
let l2 = Segment::line_from_points((0.0,0.0), (10.0, 10.0), m);

// You'll likely get compaints about missing type "R" if you don't add
// your Segments to the scene. Adding them constrains R.
let _ = Scene::new(100, 100).with_object(l).with_object(l2);

Implementations§

source§

impl<R> Segment<R>
where R: Rng,

source

pub fn line_from_points<A, B>(start: A, end: B, material: Material<R>) -> Self
where A: Into<SamplerPoint<R>>, B: Into<SamplerPoint<R>>,

Constructs a line from the given points and material.

source

pub fn curve_from_points<A, B, C>( start: A, mid: B, end: C, material: Material<R> ) -> Self
where A: Into<SamplerPoint<R>>, B: Into<SamplerPoint<R>>, C: Into<SamplerPoint<R>>,

Constructs a Bezier curve from the given points, and material.

Note: mid is the control point of the Bezier curve, the resulting path is not guarenteed to pass though this point.

Auto Trait Implementations§

§

impl<R> Freeze for Segment<R>

§

impl<R> !RefUnwindSafe for Segment<R>

§

impl<R> Send for Segment<R>

§

impl<R> Sync for Segment<R>

§

impl<R> Unpin for Segment<R>

§

impl<R> !UnwindSafe for Segment<R>

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> 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> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

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> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
§

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<T, U> TryFrom<U> for T
where U: Into<T>,

§

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>,

§

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