Struct Vertex

Source
#[repr(C)]
pub struct Vertex { pub pos: Vec3, pub norm: Vec3, pub uv: Vec2, pub col: Color32, }
Expand description

This represents a single vertex in a Mesh, all StereoKit Meshes currently use this exact layout! It’s good to fill out all values of a Vertex explicitly, as default values for the normal (0,0,0) and color (0,0,0,0) will cause your mesh to appear completely black, or even transparent in most shaders! https://stereokit.net/Pages/StereoKit/Vertex.html

§Examples

use stereokit_rust::{maths::{Vec3, Vec2, Matrix}, util::Color32, mesh::{Mesh,Vertex}, material::Material};

// Creating vertices with all fields specified
let vertices = [
    Vertex::new(Vec3::ZERO,Vec3::UP,None,         Some(Color32::rgb(0, 0, 255))),
    Vertex::new(Vec3::X,   Vec3::UP,Some(Vec2::X),Some(Color32::rgb(255, 0, 0))),
    Vertex::new(Vec3::Y,   Vec3::UP,Some(Vec2::Y),Some(Color32::rgb(0,255, 0))),
];
let indices = [0, 1, 2, 2, 1, 0];
let mut mesh = Mesh::new();
mesh.id("most_basic_mesh").keep_data(true).set_data(&vertices, &indices, true);
let material = Material::pbr();

filename_scr = "screenshots/basic_mesh.jpeg";
test_screenshot!( // !!!! Get a proper main loop !!!!
    mesh.draw(token, &material, Matrix::IDENTITY, None, None);
);
screenshot

Fields§

§pos: Vec3

Position of the vertex, in model space coordinates.

§norm: Vec3

The normal of this vertex, or the direction the vertex is facing. Preferably normalized.

§uv: Vec2

The texture coordinates at this vertex.

§col: Color32

The color of the vertex. If you aren’t using it, set it to white.

Implementations§

Source§

impl Vertex

Source

pub fn new<V: Into<Vec3>>( position: V, normal: V, texture_coordinate: Option<Vec2>, color: Option<Color32>, ) -> Self

Create a new Vertex. https://stereokit.net/Pages/StereoKit/Vertex/Vertex.html

  • position - Location of the vertex, this is typically meters in model space.
  • normal - The direction the Vertex is facing. Never leave this as zero, or your lighting may turn out black! A good default value if you don’t know what to put here is (0,1,0), but a Mesh composed entirely of this value will have flat lighting.
  • texture_coordinate - If None, set the value to Vec2::ZERO
  • color - If None, set the value to Color32::WHITE
§Examples
use stereokit_rust::{maths::{Vec3, Vec2}, mesh::Vertex, util::Color32};

let vertex = Vertex::new([0.0, 0.0, 0.0], [0.0, 1.0, 0.0], None, None);
let vertex_bis = Vertex{
        pos: Vec3::new(0.0, 0.0, 0.0),
        norm: Vec3::new(0.0, 1.0, 0.0),
        uv: Vec2::ZERO,
        col: Color32::WHITE};
assert_eq!(vertex, vertex_bis);

let vertex = Vertex::new([0.0, 0.0, 0.0], [0.0, 0.0, 0.0],
                         Some(Vec2::ZERO), Some(Color32::BLACK_TRANSPARENT) );
let vertex_default = Vertex::default();
assert_eq!(vertex, vertex_default);

Trait Implementations§

Source§

impl Clone for Vertex

Source§

fn clone(&self) -> Vertex

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 Vertex

Source§

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

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

impl Default for Vertex

Source§

fn default() -> Vertex

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

impl PartialEq for Vertex

Source§

fn eq(&self, other: &Vertex) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for Vertex

Source§

impl StructuralPartialEq for Vertex

Auto Trait Implementations§

§

impl Freeze for Vertex

§

impl RefUnwindSafe for Vertex

§

impl Send for Vertex

§

impl Sync for Vertex

§

impl Unpin for Vertex

§

impl UnwindSafe for Vertex

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