11use core:: ops:: ControlFlow :: * ;
2-
2+ use re :: core :: geom :: Ray ;
33use re:: prelude:: * ;
4+ use std:: ops:: Range ;
45
56use re:: core:: math:: color:: gray;
7+ use re:: core:: math:: rand:: { DEFAULT_RNG , DefaultRng , Distrib } ;
68use re:: core:: render:: {
7- Model ,
9+ Model , View , World ,
810 cam:: { FirstPerson , Fov } ,
911 clip:: Status :: * ,
12+ debug,
1013 scene:: Obj ,
1114 shader,
1215 tex:: SamplerClamp ,
@@ -15,6 +18,7 @@ use re::core::render::{
1518use re:: core:: util:: { pixfmt:: Rgba8888 , pnm:: read_pnm} ;
1619
1720use re:: front:: sdl2:: Window ;
21+ use re:: geom:: solids;
1822use re:: geom:: solids:: { Build , Cube } ;
1923
2024fn main ( ) {
@@ -33,7 +37,7 @@ fn main() {
3337 |v : Vertex3 < _ > , mvp : & ProjMat3 < _ > | vertex ( mvp. apply ( & v. pos ) , v. attrib ) ,
3438 |frag : Frag < Vec2 > | {
3539 let even_odd = ( frag. var . x ( ) > 0.5 ) ^ ( frag. var . y ( ) > 0.5 ) ;
36- gray ( if even_odd { 0.8 } else { 0.1 } ) . to_color4 ( )
40+ gray ( if even_odd { 0.3 } else { 0.1 } ) . to_color4 ( )
3741 } ,
3842 ) ;
3943 let crate_shader = shader:: new (
@@ -51,18 +55,32 @@ fn main() {
5155 let ( w, h) = win. dims ;
5256 let mut cam = Camera :: new ( win. dims )
5357 . transform ( FirstPerson :: default ( ) )
58+ //.transform(Mat4::identity())
5459 . viewport ( ( 10 ..w - 10 , h - 10 ..10 ) )
5560 . perspective ( Fov :: Diagonal ( degs ( 90.0 ) ) , 0.1 ..1000.0 ) ;
5661
5762 let floor = floor ( ) ;
5863 let crates = crates ( ) ;
5964
65+ let rng = & mut DefaultRng :: from_time ( ) ;
66+ let pts: Range < Point3 < World > > =
67+ pt3 ( -10.0 , 3.0 , -10.0 ) ..pt3 ( 10.0 , 6.0 , 10.0 ) ;
68+ let dirs = splat ( -1.0 ) ..splat ( 1.0 ) ;
69+
70+ let rays = ( pts, dirs) ;
71+ let rays = rays
72+ . samples ( rng)
73+ . map ( |( p, d) | Ray ( p, 20.0 * d) )
74+ . take ( 10 ) ;
75+ let b = BezierSpline :: from_rays ( rays) ;
76+ let mut bf = b. frame_iter ( 0.0001 ) ;
77+
6078 win. run ( |frame| {
6179 //
6280 // Camera
6381 //
6482
65- let mut cam_vel = Vec3 :: zero ( ) ;
83+ let mut cam_vel: Vec3 = Vec3 :: zero ( ) ;
6684
6785 let ep = & frame. win . ev_pump ;
6886
@@ -79,23 +97,61 @@ fn main() {
7997
8098 let ms = ep. relative_mouse_state ( ) ;
8199 cam. transform . rotate (
82- turns ( ms. x ( ) as f32 ) * - 0.001 ,
100+ turns ( ms. x ( ) as f32 ) * 0.001 ,
83101 turns ( ms. y ( ) as f32 ) * -0.001 ,
84102 ) ;
85- cam. transform
86- . translate ( cam_vel. mul ( frame. dt . as_secs_f32 ( ) ) ) ;
103+
104+ let mat: Mat4 < World > = bf. next ( ) . unwrap ( ) . to ( ) ;
105+
106+ //cam.transform.pos = mat.origin() + 0.2 * Vec3::Y;
107+ // cam.transform
108+ // .look_at(cam.transform.pos + mat.linear().col_vec(2));
109+
110+ // .translate(cam_vel.mul(frame.dt.as_secs_f32()));
87111
88112 //
89113 // Render
90114 //
91115
92- let world_to_project = & cam. world_to_project ( ) ;
116+ //let world_to_project = &cam.world_to_project();
117+
118+ let world_to_project = mat
119+ . inverse ( )
120+ . then ( & cam. world_to_view ( ) )
121+ . then ( & cam. project ) ;
93122
94123 let batch = Batch :: new ( )
95124 . viewport ( cam. viewport )
96125 . target ( frame. buf )
97126 . context ( frame. ctx ) ;
98127
128+ // Spline
129+ for m2w in b. frame_iter ( 0.001 ) {
130+ let m2p: ProjMat3 < World > = m2w. to ( ) . then ( & world_to_project) ;
131+
132+ debug:: circle :: < Model > ( Point3 :: origin ( ) , 1.0 )
133+ //debug::sphere(Point3::origin(), 0.1)
134+ //debug::basis(m2w)
135+ //debug::ray(Point3::origin(), Vec3::Z)
136+ . viewport ( cam. viewport )
137+ . target ( frame. buf )
138+ . context ( frame. ctx )
139+ . uniform ( & scale ( 0.1 . into ( ) ) . to ( ) . then ( & m2p) )
140+ . render ( ) ;
141+
142+ // batch
143+ // .clone()
144+ // .mesh(&cb)
145+ // .shader(shader::new(
146+ // |v: Vertex3<_>, m2p: &ProjMat3<_>| {
147+ // vertex(m2p.apply(&v.pos), ())
148+ // },
149+ // |_| rgba(0xFF, 0, 0, 0),
150+ // ))
151+ // .uniform(&m2p)
152+ // .render();
153+ }
154+
99155 // Floor
100156 {
101157 let Obj { bbox, tf, geom } = & floor;
0 commit comments