render: use left-handed coordinate system and y-up
This commit is contained in:
parent
4ba2f72572
commit
75429f4639
Binary file not shown.
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"asset" : {
|
"asset" : {
|
||||||
"generator" : "Khronos glTF Blender I/O v1.1.46",
|
"generator" : "Khronos glTF Blender I/O v1.2.75",
|
||||||
"version" : "2.0"
|
"version" : "2.0"
|
||||||
},
|
},
|
||||||
"scene" : 0,
|
"scene" : 0,
|
||||||
@ -37,63 +37,63 @@
|
|||||||
{
|
{
|
||||||
"bufferView" : 0,
|
"bufferView" : 0,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 1968,
|
"count" : 3321,
|
||||||
"max" : [
|
"max" : [
|
||||||
1.3671875,
|
1.325934886932373,
|
||||||
0.8515625,
|
0.9392361640930176,
|
||||||
0.984375
|
0.8223199844360352
|
||||||
],
|
],
|
||||||
"min" : [
|
"min" : [
|
||||||
-1.3671875,
|
-1.325934886932373,
|
||||||
-0.8515625,
|
-0.9704862236976624,
|
||||||
-0.984375
|
-0.7782661318778992
|
||||||
],
|
],
|
||||||
"type" : "VEC3"
|
"type" : "VEC3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 1,
|
"bufferView" : 1,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 1968,
|
"count" : 3321,
|
||||||
"type" : "VEC3"
|
"type" : "VEC3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 2,
|
"bufferView" : 2,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 1968,
|
"count" : 3321,
|
||||||
"type" : "VEC2"
|
"type" : "VEC2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 3,
|
"bufferView" : 3,
|
||||||
"componentType" : 5123,
|
"componentType" : 5123,
|
||||||
"count" : 2904,
|
"count" : 11808,
|
||||||
"type" : "SCALAR"
|
"type" : "SCALAR"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"bufferViews" : [
|
"bufferViews" : [
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 23616,
|
"byteLength" : 39852,
|
||||||
"byteOffset" : 0
|
"byteOffset" : 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"buffer" : 0,
|
||||||
|
"byteLength" : 39852,
|
||||||
|
"byteOffset" : 39852
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer" : 0,
|
||||||
|
"byteLength" : 26568,
|
||||||
|
"byteOffset" : 79704
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 23616,
|
"byteLength" : 23616,
|
||||||
"byteOffset" : 23616
|
"byteOffset" : 106272
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 15744,
|
|
||||||
"byteOffset" : 47232
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 5808,
|
|
||||||
"byteOffset" : 62976
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"buffers" : [
|
"buffers" : [
|
||||||
{
|
{
|
||||||
"byteLength" : 68784,
|
"byteLength" : 129888,
|
||||||
"uri" : "Monkey.bin"
|
"uri" : "Monkey.bin"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -6,7 +6,7 @@ pub trait FaceToward {
|
|||||||
|
|
||||||
impl FaceToward for Mat4 {
|
impl FaceToward for Mat4 {
|
||||||
fn face_toward(eye: Vec3, center: Vec3, up: Vec3) -> Self {
|
fn face_toward(eye: Vec3, center: Vec3, up: Vec3) -> Self {
|
||||||
let forward = (eye - center).normalize();
|
let forward = (center - eye).normalize();
|
||||||
let right = up.cross(forward).normalize();
|
let right = up.cross(forward).normalize();
|
||||||
let up = forward.cross(right);
|
let up = forward.cross(right);
|
||||||
Mat4::from_cols(
|
Mat4::from_cols(
|
||||||
|
@ -17,7 +17,7 @@ pub const FORWARD_PIPELINE_HANDLE: Handle<PipelineDescriptor> =
|
|||||||
pub fn build_forward_pipeline(shaders: &mut Assets<Shader>) -> PipelineDescriptor {
|
pub fn build_forward_pipeline(shaders: &mut Assets<Shader>) -> PipelineDescriptor {
|
||||||
PipelineDescriptor {
|
PipelineDescriptor {
|
||||||
rasterization_state: Some(RasterizationStateDescriptor {
|
rasterization_state: Some(RasterizationStateDescriptor {
|
||||||
front_face: FrontFace::Ccw,
|
front_face: FrontFace::Cw,
|
||||||
cull_mode: CullMode::Back,
|
cull_mode: CullMode::Back,
|
||||||
depth_bias: 0,
|
depth_bias: 0,
|
||||||
depth_bias_slope_scale: 0.0,
|
depth_bias_slope_scale: 0.0,
|
||||||
|
@ -17,8 +17,7 @@ pub struct PerspectiveProjection {
|
|||||||
|
|
||||||
impl CameraProjection for PerspectiveProjection {
|
impl CameraProjection for PerspectiveProjection {
|
||||||
fn get_projection_matrix(&self) -> Mat4 {
|
fn get_projection_matrix(&self) -> Mat4 {
|
||||||
let projection = Mat4::perspective_rh_gl(self.fov, self.aspect_ratio, self.near, self.far);
|
Mat4::perspective_lh(self.fov, self.aspect_ratio, self.near, self.far)
|
||||||
projection
|
|
||||||
}
|
}
|
||||||
fn update(&mut self, width: usize, height: usize) {
|
fn update(&mut self, width: usize, height: usize) {
|
||||||
self.aspect_ratio = width as f32 / height as f32;
|
self.aspect_ratio = width as f32 / height as f32;
|
||||||
@ -56,15 +55,14 @@ pub struct OrthographicProjection {
|
|||||||
|
|
||||||
impl CameraProjection for OrthographicProjection {
|
impl CameraProjection for OrthographicProjection {
|
||||||
fn get_projection_matrix(&self) -> Mat4 {
|
fn get_projection_matrix(&self) -> Mat4 {
|
||||||
let projection = Mat4::orthographic_rh(
|
Mat4::orthographic_lh(
|
||||||
self.left,
|
self.left,
|
||||||
self.right,
|
self.right,
|
||||||
self.bottom,
|
self.bottom,
|
||||||
self.top,
|
self.top,
|
||||||
self.near,
|
self.near,
|
||||||
self.far,
|
self.far,
|
||||||
);
|
)
|
||||||
projection
|
|
||||||
}
|
}
|
||||||
fn update(&mut self, width: usize, height: usize) {
|
fn update(&mut self, width: usize, height: usize) {
|
||||||
match self.window_origin {
|
match self.window_origin {
|
||||||
@ -93,8 +91,8 @@ impl Default for OrthographicProjection {
|
|||||||
right: 0.0,
|
right: 0.0,
|
||||||
bottom: 0.0,
|
bottom: 0.0,
|
||||||
top: 0.0,
|
top: 0.0,
|
||||||
near: -1.0,
|
near: 0.0,
|
||||||
far: 0.1,
|
far: 1000.0,
|
||||||
window_origin: WindowOrigin::Center,
|
window_origin: WindowOrigin::Center,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -249,6 +249,17 @@ pub mod shape {
|
|||||||
|
|
||||||
pub struct Quad {
|
pub struct Quad {
|
||||||
pub size: Vec2,
|
pub size: Vec2,
|
||||||
|
pub flip: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Quad {
|
||||||
|
pub fn new(size: Vec2) -> Self {
|
||||||
|
Self { size, flip: false }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn flipped(size: Vec2) -> Self {
|
||||||
|
Self { size, flip: true }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<Quad> for Mesh {
|
impl From<Quad> for Mesh {
|
||||||
@ -260,28 +271,53 @@ pub mod shape {
|
|||||||
let north_east = vec2(extent_x, extent_y);
|
let north_east = vec2(extent_x, extent_y);
|
||||||
let south_west = vec2(-extent_x, -extent_y);
|
let south_west = vec2(-extent_x, -extent_y);
|
||||||
let south_east = vec2(extent_x, -extent_y);
|
let south_east = vec2(extent_x, -extent_y);
|
||||||
let vertices = &[
|
let vertices = if quad.flip {
|
||||||
(
|
[
|
||||||
[south_west.x(), south_west.y(), 0.0],
|
(
|
||||||
[0.0, 0.0, 1.0],
|
[south_west.x(), south_west.y(), 0.0],
|
||||||
[0.0, 1.0],
|
[0.0, 0.0, 1.0],
|
||||||
),
|
[0.0, 1.0],
|
||||||
(
|
),
|
||||||
[north_west.x(), north_west.y(), 0.0],
|
(
|
||||||
[0.0, 0.0, 1.0],
|
[north_west.x(), north_west.y(), 0.0],
|
||||||
[0.0, 0.0],
|
[0.0, 0.0, 1.0],
|
||||||
),
|
[0.0, 0.0],
|
||||||
(
|
),
|
||||||
[north_east.x(), north_east.y(), 0.0],
|
(
|
||||||
[0.0, 0.0, 1.0],
|
[north_east.x(), north_east.y(), 0.0],
|
||||||
[1.0, 0.0],
|
[0.0, 0.0, 1.0],
|
||||||
),
|
[1.0, 0.0],
|
||||||
(
|
),
|
||||||
[south_east.x(), south_east.y(), 0.0],
|
(
|
||||||
[0.0, 0.0, 1.0],
|
[south_east.x(), south_east.y(), 0.0],
|
||||||
[1.0, 1.0],
|
[0.0, 0.0, 1.0],
|
||||||
),
|
[1.0, 1.0],
|
||||||
];
|
),
|
||||||
|
]
|
||||||
|
} else {
|
||||||
|
[
|
||||||
|
(
|
||||||
|
[south_east.x(), south_east.y(), 0.0],
|
||||||
|
[0.0, 0.0, 1.0],
|
||||||
|
[1.0, 1.0],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
[north_east.x(), north_east.y(), 0.0],
|
||||||
|
[0.0, 0.0, 1.0],
|
||||||
|
[1.0, 0.0],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
[north_west.x(), north_west.y(), 0.0],
|
||||||
|
[0.0, 0.0, 1.0],
|
||||||
|
[0.0, 0.0],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
[south_west.x(), south_west.y(), 0.0],
|
||||||
|
[0.0, 0.0, 1.0],
|
||||||
|
[0.0, 1.0],
|
||||||
|
),
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
let indices = vec![0, 2, 1, 0, 3, 2];
|
let indices = vec![0, 2, 1, 0, 3, 2];
|
||||||
|
|
||||||
@ -312,10 +348,51 @@ pub mod shape {
|
|||||||
|
|
||||||
impl From<Plane> for Mesh {
|
impl From<Plane> for Mesh {
|
||||||
fn from(plane: Plane) -> Self {
|
fn from(plane: Plane) -> Self {
|
||||||
Quad {
|
let extent = plane.size / 2.0;
|
||||||
size: Vec2::new(plane.size, plane.size),
|
|
||||||
|
let vertices = [
|
||||||
|
(
|
||||||
|
[extent, 0.0, -extent],
|
||||||
|
[0.0, 1.0, 0.0],
|
||||||
|
[1.0, 1.0],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
[extent, 0.0, extent],
|
||||||
|
[0.0, 1.0, 0.0],
|
||||||
|
[1.0, 0.0],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
[-extent, 0.0, extent],
|
||||||
|
[0.0, 1.0, 0.0],
|
||||||
|
[0.0, 0.0],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
[-extent, 0.0, -extent],
|
||||||
|
[0.0, 1.0, 0.0],
|
||||||
|
[0.0, 1.0],
|
||||||
|
),
|
||||||
|
];
|
||||||
|
|
||||||
|
let indices = vec![0, 2, 1, 0, 3, 2];
|
||||||
|
|
||||||
|
let mut positions = Vec::new();
|
||||||
|
let mut normals = Vec::new();
|
||||||
|
let mut uvs = Vec::new();
|
||||||
|
for (position, normal, uv) in vertices.iter() {
|
||||||
|
positions.push(position.clone());
|
||||||
|
normals.push(normal.clone());
|
||||||
|
uvs.push(uv.clone());
|
||||||
|
}
|
||||||
|
|
||||||
|
Mesh {
|
||||||
|
primitive_topology: PrimitiveTopology::TriangleList,
|
||||||
|
attributes: vec![
|
||||||
|
VertexAttribute::position(positions),
|
||||||
|
VertexAttribute::normal(normals),
|
||||||
|
VertexAttribute::uv(uvs),
|
||||||
|
],
|
||||||
|
indices: Some(indices),
|
||||||
}
|
}
|
||||||
.into()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,7 @@ impl PipelineDescriptor {
|
|||||||
sample_mask: !0,
|
sample_mask: !0,
|
||||||
alpha_to_coverage_enabled: false,
|
alpha_to_coverage_enabled: false,
|
||||||
rasterization_state: Some(RasterizationStateDescriptor {
|
rasterization_state: Some(RasterizationStateDescriptor {
|
||||||
front_face: FrontFace::Ccw,
|
front_face: FrontFace::Cw,
|
||||||
cull_mode: CullMode::Back,
|
cull_mode: CullMode::Back,
|
||||||
depth_bias: 0,
|
depth_bias: 0,
|
||||||
depth_bias_slope_scale: 0.0,
|
depth_bias_slope_scale: 0.0,
|
||||||
|
@ -74,7 +74,7 @@ pub enum FrontFace {
|
|||||||
|
|
||||||
impl Default for FrontFace {
|
impl Default for FrontFace {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
FrontFace::Ccw
|
FrontFace::Cw
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,9 +50,8 @@ impl AppPlugin for SpritePlugin {
|
|||||||
let mut meshes = resources.get_mut::<Assets<Mesh>>().unwrap();
|
let mut meshes = resources.get_mut::<Assets<Mesh>>().unwrap();
|
||||||
meshes.set(
|
meshes.set(
|
||||||
QUAD_HANDLE,
|
QUAD_HANDLE,
|
||||||
Mesh::from(shape::Quad {
|
// Use a flipped quad because the camera is facing "forward" but quads should face backward
|
||||||
size: Vec2::new(1.0, 1.0),
|
Mesh::from(shape::Quad::flipped(Vec2::new(1.0, 1.0))),
|
||||||
}),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut color_materials = resources.get_mut::<Assets<ColorMaterial>>().unwrap();
|
let mut color_materials = resources.get_mut::<Assets<ColorMaterial>>().unwrap();
|
||||||
|
@ -21,7 +21,7 @@ pub const SPRITE_SHEET_PIPELINE_HANDLE: Handle<PipelineDescriptor> =
|
|||||||
pub fn build_sprite_sheet_pipeline(shaders: &mut Assets<Shader>) -> PipelineDescriptor {
|
pub fn build_sprite_sheet_pipeline(shaders: &mut Assets<Shader>) -> PipelineDescriptor {
|
||||||
PipelineDescriptor {
|
PipelineDescriptor {
|
||||||
rasterization_state: Some(RasterizationStateDescriptor {
|
rasterization_state: Some(RasterizationStateDescriptor {
|
||||||
front_face: FrontFace::Ccw,
|
front_face: FrontFace::Cw,
|
||||||
cull_mode: CullMode::None,
|
cull_mode: CullMode::None,
|
||||||
depth_bias: 0,
|
depth_bias: 0,
|
||||||
depth_bias_slope_scale: 0.0,
|
depth_bias_slope_scale: 0.0,
|
||||||
@ -66,7 +66,7 @@ pub fn build_sprite_sheet_pipeline(shaders: &mut Assets<Shader>) -> PipelineDesc
|
|||||||
pub fn build_sprite_pipeline(shaders: &mut Assets<Shader>) -> PipelineDescriptor {
|
pub fn build_sprite_pipeline(shaders: &mut Assets<Shader>) -> PipelineDescriptor {
|
||||||
PipelineDescriptor {
|
PipelineDescriptor {
|
||||||
rasterization_state: Some(RasterizationStateDescriptor {
|
rasterization_state: Some(RasterizationStateDescriptor {
|
||||||
front_face: FrontFace::Ccw,
|
front_face: FrontFace::Cw,
|
||||||
cull_mode: CullMode::None,
|
cull_mode: CullMode::None,
|
||||||
depth_bias: 0,
|
depth_bias: 0,
|
||||||
depth_bias_slope_scale: 0.0,
|
depth_bias_slope_scale: 0.0,
|
||||||
|
@ -10,11 +10,6 @@ impl Rotation {
|
|||||||
pub fn identity() -> Self {
|
pub fn identity() -> Self {
|
||||||
Self(Quat::identity())
|
Self(Quat::identity())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline(always)]
|
|
||||||
pub fn from_euler_angles(yaw: f32, pitch: f32, roll: f32) -> Self {
|
|
||||||
Self(Quat::from_rotation_ypr(yaw, pitch, roll))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Rotation {
|
impl Default for Rotation {
|
||||||
|
@ -14,7 +14,7 @@ pub const UI_PIPELINE_HANDLE: Handle<PipelineDescriptor> =
|
|||||||
pub fn build_ui_pipeline(shaders: &mut Assets<Shader>) -> PipelineDescriptor {
|
pub fn build_ui_pipeline(shaders: &mut Assets<Shader>) -> PipelineDescriptor {
|
||||||
PipelineDescriptor {
|
PipelineDescriptor {
|
||||||
rasterization_state: Some(RasterizationStateDescriptor {
|
rasterization_state: Some(RasterizationStateDescriptor {
|
||||||
front_face: FrontFace::Ccw,
|
front_face: FrontFace::Cw,
|
||||||
cull_mode: CullMode::None,
|
cull_mode: CullMode::None,
|
||||||
depth_bias: 0,
|
depth_bias: 0,
|
||||||
depth_bias_slope_scale: 0.0,
|
depth_bias_slope_scale: 0.0,
|
||||||
|
@ -6,7 +6,7 @@ use bevy_window::Windows;
|
|||||||
use glam::Vec2;
|
use glam::Vec2;
|
||||||
use legion::{prelude::*, systems::SubWorld};
|
use legion::{prelude::*, systems::SubWorld};
|
||||||
|
|
||||||
pub const UI_Z_STEP: f32 = 0.0001;
|
pub const UI_Z_STEP: f32 = 0.001;
|
||||||
|
|
||||||
pub fn ui_update_system() -> Box<dyn Schedulable> {
|
pub fn ui_update_system() -> Box<dyn Schedulable> {
|
||||||
SystemBuilder::new("ui_update")
|
SystemBuilder::new("ui_update")
|
||||||
@ -20,7 +20,7 @@ pub fn ui_update_system() -> Box<dyn Schedulable> {
|
|||||||
let mut window_quad = Quad {
|
let mut window_quad = Quad {
|
||||||
size: Vec2::new(window.width as f32, window.height as f32),
|
size: Vec2::new(window.width as f32, window.height as f32),
|
||||||
position: Vec2::new(0.0, 0.0),
|
position: Vec2::new(0.0, 0.0),
|
||||||
z_index: 0.0,
|
z_index: 999.0,
|
||||||
};
|
};
|
||||||
for entity in node_query
|
for entity in node_query
|
||||||
.iter_entities(world)
|
.iter_entities(world)
|
||||||
@ -57,7 +57,7 @@ fn update_node_entity(world: &mut SubWorld, entity: Entity, parent_quad: Quad) -
|
|||||||
return Some(Quad {
|
return Some(Quad {
|
||||||
size: quad.size,
|
size: quad.size,
|
||||||
position: quad.position - quad.size / 2.0,
|
position: quad.position - quad.size / 2.0,
|
||||||
z_index: quad.z_index + UI_Z_STEP,
|
z_index: quad.z_index - UI_Z_STEP,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -69,6 +69,6 @@ fn update_node_entity(world: &mut SubWorld, entity: Entity, parent_quad: Quad) -
|
|||||||
fn process_child_result(_parent_result: Quad, child_result: Quad) -> Quad {
|
fn process_child_result(_parent_result: Quad, child_result: Quad) -> Quad {
|
||||||
// "earlier" children are sorted behind "later" children
|
// "earlier" children are sorted behind "later" children
|
||||||
let mut result = child_result.clone();
|
let mut result = child_result.clone();
|
||||||
result.z_index += UI_Z_STEP;
|
result.z_index -= UI_Z_STEP;
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
@ -40,20 +40,20 @@ fn setup(
|
|||||||
.add_entity(MeshEntity {
|
.add_entity(MeshEntity {
|
||||||
mesh: cube_handle,
|
mesh: cube_handle,
|
||||||
material: cube_material_handle,
|
material: cube_material_handle,
|
||||||
translation: Translation::new(0.0, 0.0, 1.0),
|
translation: Translation::new(0.0, 1.0, 0.0),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
// light
|
// light
|
||||||
.add_entity(LightEntity {
|
.add_entity(LightEntity {
|
||||||
translation: Translation::new(4.0, -4.0, 5.0),
|
translation: Translation::new(4.0, 5.0, -4.0),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
// camera
|
// camera
|
||||||
.add_entity(PerspectiveCameraEntity {
|
.add_entity(PerspectiveCameraEntity {
|
||||||
transform: Transform::new_sync_disabled(Mat4::face_toward(
|
transform: Transform::new_sync_disabled(Mat4::face_toward(
|
||||||
Vec3::new(3.0, 8.0, 5.0),
|
Vec3::new(3.0, 5.0, 8.0),
|
||||||
Vec3::new(0.0, 0.0, 0.0),
|
Vec3::new(0.0, 0.0, 0.0),
|
||||||
Vec3::new(0.0, 0.0, 1.0),
|
Vec3::new(0.0, 1.0, 0.0),
|
||||||
)),
|
)),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
|
@ -34,15 +34,15 @@ fn setup(
|
|||||||
})
|
})
|
||||||
// light
|
// light
|
||||||
.add_entity(LightEntity {
|
.add_entity(LightEntity {
|
||||||
translation: Translation::new(4.0, -4.0, 5.0),
|
translation: Translation::new(4.0, 5.0, 4.0),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
// camera
|
// camera
|
||||||
.add_entity(PerspectiveCameraEntity {
|
.add_entity(PerspectiveCameraEntity {
|
||||||
transform: Transform::new_sync_disabled(Mat4::face_toward(
|
transform: Transform::new_sync_disabled(Mat4::face_toward(
|
||||||
Vec3::new(2.0, -6.0, 2.0),
|
Vec3::new(-2.0, 2.0, 6.0),
|
||||||
Vec3::new(0.0, 0.0, 0.0),
|
Vec3::new(0.0, 0.0, 0.0),
|
||||||
Vec3::new(0.0, 0.0, 1.0),
|
Vec3::new(0.0, 1.0, 0.0),
|
||||||
)),
|
)),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
|
@ -48,7 +48,7 @@ fn setup(
|
|||||||
})
|
})
|
||||||
// light
|
// light
|
||||||
.add_entity(LightEntity {
|
.add_entity(LightEntity {
|
||||||
translation: Translation::new(4.0, -4.0, 5.0),
|
translation: Translation::new(4.0, 5.0, -4.0),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
// camera
|
// camera
|
||||||
@ -56,7 +56,7 @@ fn setup(
|
|||||||
transform: Transform::new_sync_disabled(Mat4::face_toward(
|
transform: Transform::new_sync_disabled(Mat4::face_toward(
|
||||||
Vec3::new(5.0, 10.0, 10.0),
|
Vec3::new(5.0, 10.0, 10.0),
|
||||||
Vec3::new(0.0, 0.0, 0.0),
|
Vec3::new(0.0, 0.0, 0.0),
|
||||||
Vec3::new(0.0, 0.0, 1.0),
|
Vec3::new(0.0, 1.0, 0.0),
|
||||||
)),
|
)),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
|
@ -64,9 +64,9 @@ fn setup(
|
|||||||
// camera
|
// camera
|
||||||
.add_entity(PerspectiveCameraEntity {
|
.add_entity(PerspectiveCameraEntity {
|
||||||
transform: Transform::new_sync_disabled(Mat4::face_toward(
|
transform: Transform::new_sync_disabled(Mat4::face_toward(
|
||||||
Vec3::new(3.0, 8.0, 5.0),
|
Vec3::new(3.0, 5.0, -8.0),
|
||||||
Vec3::new(0.0, 0.0, 0.0),
|
Vec3::new(0.0, 0.0, 0.0),
|
||||||
Vec3::new(0.0, 0.0, 1.0),
|
Vec3::new(0.0, 1.0, 0.0),
|
||||||
)),
|
)),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
@ -85,9 +85,9 @@ fn setup(
|
|||||||
mesh: cube_handle,
|
mesh: cube_handle,
|
||||||
material: spawned_material_handle,
|
material: spawned_material_handle,
|
||||||
translation: Translation::new(
|
translation: Translation::new(
|
||||||
rng.gen_range(-50.0, 50.0),
|
|
||||||
rng.gen_range(-50.0, 50.0),
|
rng.gen_range(-50.0, 50.0),
|
||||||
0.0,
|
0.0,
|
||||||
|
rng.gen_range(-50.0, 50.0),
|
||||||
),
|
),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
|
@ -24,9 +24,10 @@ fn setup(
|
|||||||
|
|
||||||
// create a new quad mesh. this is what we will apply the texture to
|
// create a new quad mesh. this is what we will apply the texture to
|
||||||
let quad_width = 8.0;
|
let quad_width = 8.0;
|
||||||
let quad_handle = meshes.add(Mesh::from(shape::Quad {
|
let quad_handle = meshes.add(Mesh::from(shape::Quad::new(Vec2::new(
|
||||||
size: Vec2::new(quad_width, quad_width * aspect),
|
quad_width,
|
||||||
}));
|
quad_width * aspect,
|
||||||
|
))));
|
||||||
|
|
||||||
// this material renders the texture normally
|
// this material renders the texture normally
|
||||||
let material_handle = materials.add(StandardMaterial {
|
let material_handle = materials.add(StandardMaterial {
|
||||||
@ -58,8 +59,8 @@ fn setup(
|
|||||||
.add_entity(MeshEntity {
|
.add_entity(MeshEntity {
|
||||||
mesh: quad_handle,
|
mesh: quad_handle,
|
||||||
material: material_handle,
|
material: material_handle,
|
||||||
translation: Translation::new(0.0, -1.5, 0.0),
|
translation: Translation::new(0.0, 0.0, -1.5),
|
||||||
rotation: Rotation::from_euler_angles(0.0, std::f32::consts::PI / 3.0, 0.0),
|
rotation: Rotation(Quat::from_rotation_x(std::f32::consts::PI / 5.0)),
|
||||||
draw: Draw {
|
draw: Draw {
|
||||||
is_transparent: true,
|
is_transparent: true,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
@ -71,7 +72,7 @@ fn setup(
|
|||||||
mesh: quad_handle,
|
mesh: quad_handle,
|
||||||
material: red_material_handle,
|
material: red_material_handle,
|
||||||
translation: Translation::new(0.0, 0.0, 0.0),
|
translation: Translation::new(0.0, 0.0, 0.0),
|
||||||
rotation: Rotation::from_euler_angles(0.0, std::f32::consts::PI / 3.0, 0.0),
|
rotation: Rotation(Quat::from_rotation_x(std::f32::consts::PI / 5.0)),
|
||||||
draw: Draw {
|
draw: Draw {
|
||||||
is_transparent: true,
|
is_transparent: true,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
@ -82,8 +83,8 @@ fn setup(
|
|||||||
.add_entity(MeshEntity {
|
.add_entity(MeshEntity {
|
||||||
mesh: quad_handle,
|
mesh: quad_handle,
|
||||||
material: blue_material_handle,
|
material: blue_material_handle,
|
||||||
translation: Translation::new(0.0, 1.5, 0.0),
|
translation: Translation::new(0.0, 0.0, 1.5),
|
||||||
rotation: Rotation::from_euler_angles(0.0, std::f32::consts::PI / 3.0, 0.0),
|
rotation: Rotation(Quat::from_rotation_x(std::f32::consts::PI / 5.0)),
|
||||||
draw: Draw {
|
draw: Draw {
|
||||||
is_transparent: true,
|
is_transparent: true,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
@ -93,9 +94,9 @@ fn setup(
|
|||||||
// camera
|
// camera
|
||||||
.add_entity(PerspectiveCameraEntity {
|
.add_entity(PerspectiveCameraEntity {
|
||||||
transform: Transform::new_sync_disabled(Mat4::face_toward(
|
transform: Transform::new_sync_disabled(Mat4::face_toward(
|
||||||
Vec3::new(3.0, -8.0, 5.0),
|
Vec3::new(3.0, 5.0, -8.0),
|
||||||
Vec3::new(0.0, 0.0, 0.0),
|
Vec3::new(0.0, 0.0, 0.0),
|
||||||
Vec3::new(0.0, 0.0, 1.0),
|
Vec3::new(0.0, 1.0, 0.0),
|
||||||
)),
|
)),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
|
@ -64,7 +64,7 @@ fn setup(
|
|||||||
shaded: false,
|
shaded: false,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}),
|
}),
|
||||||
translation: Translation::new(0.0, 0.0, 3.0),
|
translation: Translation::new(0.0, 3.0, 0.0),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
.add_entity(MeshEntity {
|
.add_entity(MeshEntity {
|
||||||
@ -73,21 +73,16 @@ fn setup(
|
|||||||
shaded: false,
|
shaded: false,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}),
|
}),
|
||||||
translation: Translation::new(0.0, 0.0, -3.0),
|
translation: Translation::new(0.0, -3.0, 0.0),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
// light
|
|
||||||
.add_entity(LightEntity {
|
|
||||||
translation: Translation::new(4.0, -4.0, 5.0),
|
|
||||||
..Default::default()
|
|
||||||
})
|
|
||||||
// camera
|
// camera
|
||||||
.add_entity(PerspectiveCameraEntity {
|
.add_entity(PerspectiveCameraEntity {
|
||||||
transform: Transform::new_sync_disabled(Mat4::face_toward(
|
transform: Transform::new_sync_disabled(Mat4::face_toward(
|
||||||
Vec3::new(5.0, 10.0, 10.0),
|
Vec3::new(5.0, 10.0, 10.0),
|
||||||
Vec3::new(0.0, 0.0, 0.0),
|
Vec3::new(0.0, 0.0, 0.0),
|
||||||
Vec3::new(0.0, 0.0, 1.0),
|
Vec3::new(0.0, 1.0, 0.0),
|
||||||
)),
|
)),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
|
@ -30,15 +30,15 @@ fn setup(
|
|||||||
})
|
})
|
||||||
// light
|
// light
|
||||||
.add_entity(LightEntity {
|
.add_entity(LightEntity {
|
||||||
translation: Translation::new(4.0, -4.0, 5.0),
|
translation: Translation::new(4.0, 5.0, 4.0),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
// camera
|
// camera
|
||||||
.add_entity(PerspectiveCameraEntity {
|
.add_entity(PerspectiveCameraEntity {
|
||||||
transform: Transform::new_sync_disabled(Mat4::face_toward(
|
transform: Transform::new_sync_disabled(Mat4::face_toward(
|
||||||
Vec3::new(3.0, 8.0, 5.0),
|
Vec3::new(3.0, 5.0, 8.0),
|
||||||
Vec3::new(0.0, 0.0, 0.0),
|
Vec3::new(0.0, 0.0, 0.0),
|
||||||
Vec3::new(0.0, 0.0, 1.0),
|
Vec3::new(0.0, 1.0, 0.0),
|
||||||
)),
|
)),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
|
@ -67,15 +67,15 @@ fn setup(
|
|||||||
})
|
})
|
||||||
// light
|
// light
|
||||||
.add_entity(LightEntity {
|
.add_entity(LightEntity {
|
||||||
translation: Translation::new(4.0, -4.0, 5.0),
|
translation: Translation::new(4.0, 5.0, 4.0),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
// camera
|
// camera
|
||||||
.add_entity(PerspectiveCameraEntity {
|
.add_entity(PerspectiveCameraEntity {
|
||||||
transform: Transform::new_sync_disabled(Mat4::face_toward(
|
transform: Transform::new_sync_disabled(Mat4::face_toward(
|
||||||
Vec3::new(0.0, -10.0, 3.0),
|
Vec3::new(0.0, 3.0, 10.0),
|
||||||
Vec3::new(0.0, 0.0, 0.0),
|
Vec3::new(0.0, 0.0, 0.0),
|
||||||
Vec3::new(0.0, 0.0, 1.0),
|
Vec3::new(0.0, 1.0, 0.0),
|
||||||
)),
|
)),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
|
@ -42,15 +42,15 @@ fn setup(
|
|||||||
})
|
})
|
||||||
// light
|
// light
|
||||||
.add_entity(LightEntity {
|
.add_entity(LightEntity {
|
||||||
translation: Translation::new(4.0, -4.0, 5.0),
|
translation: Translation::new(4.0, 5.0, 4.0),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
// camera
|
// camera
|
||||||
.add_entity(PerspectiveCameraEntity {
|
.add_entity(PerspectiveCameraEntity {
|
||||||
transform: Transform::new_sync_disabled(Mat4::face_toward(
|
transform: Transform::new_sync_disabled(Mat4::face_toward(
|
||||||
Vec3::new(2.0, -6.0, 2.0),
|
Vec3::new(2.0, 2.0, 6.0),
|
||||||
Vec3::new(0.0, 0.0, 0.0),
|
Vec3::new(0.0, 0.0, 0.0),
|
||||||
Vec3::new(0.0, 0.0, 1.0),
|
Vec3::new(0.0, 1.0, 0.0),
|
||||||
)),
|
)),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
|
@ -104,9 +104,9 @@ fn setup(
|
|||||||
// camera
|
// camera
|
||||||
.add_entity(PerspectiveCameraEntity {
|
.add_entity(PerspectiveCameraEntity {
|
||||||
transform: Transform::new_sync_disabled(Mat4::face_toward(
|
transform: Transform::new_sync_disabled(Mat4::face_toward(
|
||||||
Vec3::new(3.0, 8.0, 5.0),
|
Vec3::new(3.0, 5.0, -8.0),
|
||||||
Vec3::new(0.0, 0.0, 0.0),
|
Vec3::new(0.0, 0.0, 0.0),
|
||||||
Vec3::new(0.0, 0.0, 1.0),
|
Vec3::new(0.0, 1.0, 0.0),
|
||||||
)),
|
)),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
|
@ -82,7 +82,7 @@ fn setup(
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Create a blue material, which uses our "always_blue" shader def
|
// Create a blue material, which uses our "always_blue" shader def
|
||||||
let red_material = materials.add(MyMaterial {
|
let blue_material = materials.add(MyMaterial {
|
||||||
color: Color::rgb(0.0, 0.0, 0.0),
|
color: Color::rgb(0.0, 0.0, 0.0),
|
||||||
always_blue: true,
|
always_blue: true,
|
||||||
});
|
});
|
||||||
@ -140,16 +140,16 @@ fn setup(
|
|||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
)]),
|
)]),
|
||||||
material: red_material,
|
material: blue_material,
|
||||||
translation: Translation::new(2.0, 0.0, 0.0),
|
translation: Translation::new(2.0, 0.0, 0.0),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
// camera
|
// camera
|
||||||
.add_entity(PerspectiveCameraEntity {
|
.add_entity(PerspectiveCameraEntity {
|
||||||
transform: Transform::new_sync_disabled(Mat4::face_toward(
|
transform: Transform::new_sync_disabled(Mat4::face_toward(
|
||||||
Vec3::new(3.0, 8.0, 5.0),
|
Vec3::new(3.0, 5.0, -8.0),
|
||||||
Vec3::new(0.0, 0.0, 0.0),
|
Vec3::new(0.0, 0.0, 0.0),
|
||||||
Vec3::new(0.0, 0.0, 1.0),
|
Vec3::new(0.0, 1.0, 0.0),
|
||||||
)),
|
)),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user