pub struct Light {
pub light_type: LightType,
pub intensity: f64,
}Expand description
A light object used to define a scene’s lighting. Used by DisplayMode::Illuminated
Fields§
§light_type: LightTypeThe type of light and the way it affects faces based on their normals
intensity: f64The intensity of the light
Implementations§
Source§impl Light
impl Light
Sourcepub const fn new_ambient(intensity: f64) -> Self
pub const fn new_ambient(intensity: f64) -> Self
Create a new ambient light
Examples found in repository?
examples/donut.rs (line 23)
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
fn main() {
let mut view = View::new(100, 45, ColChar::EMPTY);
let mut viewport = Viewport::new(
Transform3D::look_at_lh(Vec3D::new(0.0, -3.0, 6.0), Vec3D::ZERO, Vec3D::Y),
FOV,
view.center(),
);
viewport.display_mode = DisplayMode::Illuminated {
lights: vec![
Light::new_ambient(0.3),
Light::new_directional(0.7, Vec3D::new(1.0, 1.0, 1.0)),
],
};
viewport.objects.push(Mesh3D::torus(1.8, 1.0, 32, 16));
fps_gameloop!(
{
let donut_tr = &mut viewport.objects[0].transform;
*donut_tr = donut_tr.mul_mat4(&Transform3D::from_rotation_y(-0.03));
*donut_tr = donut_tr.mul_mat4(&Transform3D::from_rotation_x(0.03));
},
{
view.clear();
view.draw(&viewport);
let _ = view.display_render();
},
FPS
);
}More examples
examples/spinning-cube.rs (line 26)
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
fn main() {
let mut view = View::new(100, 50, ColChar::EMPTY);
let mut viewport = Viewport::new(
Transform3D::look_at_lh(Vec3D::new(0.0, -1.5, 4.3), Vec3D::ZERO, Vec3D::Y),
FOV,
view.center(),
);
viewport.objects.push(Mesh3D::default_cube());
viewport.display_mode = DisplayMode::Illuminated {
lights: vec![
Light::new_ambient(0.3),
Light::new_directional(0.6, Vec3D::new(0.5, 1.0, 1.0)),
],
};
fps_gameloop!(
{
viewport.objects[0].transform = viewport.objects[0]
.transform
.mul_mat4(&Transform3D::from_rotation_y(-0.05));
},
{
view.clear();
view.draw(&viewport);
let _ = view.display_render();
},
FPS,
|elapsed: Duration, frame_skip| {
println!(
"Elapsed: {:.2?}µs | Frame skip: {}",
elapsed.as_micros(),
frame_skip
);
}
);
}Sourcepub const fn new_directional(intensity: f64, direction: Vec3D) -> Self
pub const fn new_directional(intensity: f64, direction: Vec3D) -> Self
Create a new directional light
Examples found in repository?
examples/donut.rs (line 24)
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
fn main() {
let mut view = View::new(100, 45, ColChar::EMPTY);
let mut viewport = Viewport::new(
Transform3D::look_at_lh(Vec3D::new(0.0, -3.0, 6.0), Vec3D::ZERO, Vec3D::Y),
FOV,
view.center(),
);
viewport.display_mode = DisplayMode::Illuminated {
lights: vec![
Light::new_ambient(0.3),
Light::new_directional(0.7, Vec3D::new(1.0, 1.0, 1.0)),
],
};
viewport.objects.push(Mesh3D::torus(1.8, 1.0, 32, 16));
fps_gameloop!(
{
let donut_tr = &mut viewport.objects[0].transform;
*donut_tr = donut_tr.mul_mat4(&Transform3D::from_rotation_y(-0.03));
*donut_tr = donut_tr.mul_mat4(&Transform3D::from_rotation_x(0.03));
},
{
view.clear();
view.draw(&viewport);
let _ = view.display_render();
},
FPS
);
}More examples
examples/spinning-cube.rs (line 27)
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
fn main() {
let mut view = View::new(100, 50, ColChar::EMPTY);
let mut viewport = Viewport::new(
Transform3D::look_at_lh(Vec3D::new(0.0, -1.5, 4.3), Vec3D::ZERO, Vec3D::Y),
FOV,
view.center(),
);
viewport.objects.push(Mesh3D::default_cube());
viewport.display_mode = DisplayMode::Illuminated {
lights: vec![
Light::new_ambient(0.3),
Light::new_directional(0.6, Vec3D::new(0.5, 1.0, 1.0)),
],
};
fps_gameloop!(
{
viewport.objects[0].transform = viewport.objects[0]
.transform
.mul_mat4(&Transform3D::from_rotation_y(-0.05));
},
{
view.clear();
view.draw(&viewport);
let _ = view.display_render();
},
FPS,
|elapsed: Duration, frame_skip| {
println!(
"Elapsed: {:.2?}µs | Frame skip: {}",
elapsed.as_micros(),
frame_skip
);
}
);
}Sourcepub fn calculate_intensity(&self, point: Vec3D, normal: Vec3D) -> f64
pub fn calculate_intensity(&self, point: Vec3D, normal: Vec3D) -> f64
Calculate the intensity of the light as it affects a surface with the given normal
Trait Implementations§
impl Copy for Light
impl StructuralPartialEq for Light
Auto Trait Implementations§
impl Freeze for Light
impl RefUnwindSafe for Light
impl Send for Light
impl Sync for Light
impl Unpin for Light
impl UnwindSafe for Light
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more