Struct tobj::Mesh [] [src]

pub struct Mesh {
    pub positions: Vec<f32>,
    pub normals: Vec<f32>,
    pub texcoords: Vec<f32>,
    pub indices: Vec<u32>,
    pub material_id: Option<usize>,
}

A mesh made up of triangles loaded from some OBJ file

Fields

positions: Vec<f32>

Flattened 3 component floating point vectors, storing positions of vertices in the mesh

normals: Vec<f32>

Flattened 3 component floating point vectors, storing normals of vertices in the mesh. Not all meshes have normals, if no normals are specified this Vec will be empty

texcoords: Vec<f32>

Flattened 2 component floating point vectors, storing texture coordinates of vertices in the mesh. Not all meshes have normals, if no texture coordinates are specified this Vec will be empty

indices: Vec<u32>

Indices for vertices of each triangle. Each face in the mesh is a triangle and the indices specify the position, normal and texture coordinate for each vertex of the face.

Example:

// For some mesh with positions, normals and texcoords load the attributes
// for the first vertex

use std::path::Path;

let cornell_box = tobj::load_obj(&Path::new("cornell_box.obj"));
assert!(cornell_box.is_ok());
let (models, materials) = cornell_box.unwrap();

let mesh = &models[0].mesh;
let i = mesh.indices[0] as usize;
// pos = [x, y, z]
let pos = [mesh.positions[i * 3], mesh.positions[i * 3 + 1],
            mesh.positions[i * 3 + 2]];

if !mesh.normals.is_empty() {
    // normal = [x, y, z]
    let normal = [mesh.normals[i * 3], mesh.normals[i * 3 + 1],
                  mesh.normals[i * 3 + 2]];
}

if !mesh.texcoords.is_empty() {
    // texcoord = [u, v];
    let texcoord = [mesh.texcoords[i * 2], mesh.texcoords[i * 2 + 1]];
}
material_id: Option<usize>

Optional material id associated with this mesh. The material id indexes into the Vec of Materials loaded from the associated MTL file

Methods

impl Mesh
[src]

fn new(pos: Vec<f32>, norm: Vec<f32>, tex: Vec<f32>, indices: Vec<u32>, material_id: Option<usize>) -> Mesh

Create a new mesh specifying the geometry for the mesh

fn empty() -> Mesh

Create a new empty mesh

Trait Implementations

impl Clone for Mesh
[src]

fn clone(&self) -> Mesh

Returns a copy of the value. Read more

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

Performs copy-assignment from source. Read more

impl Debug for Mesh
[src]

fn fmt(&self, __arg_0: &mut Formatter) -> Result

Formats the value using the given formatter.