1
2
3
4
5
6
7
8
9
10
11
12
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
use ;
use ;
use ToLower;
// Test everything
// cargo test && cargo test --bins --features=pallet
pub
// // extern crate kiss3d;
// use std::thread::sleep;
// use std::time::{Duration, Instant};
// use kiss3d::camera::{self, Camera, FirstPerson};
// use kiss3d::event::Key;
// use kiss3d::light::Light;
// use kiss3d::nalgebra::{Point3, Translation3, UnitQuaternion, Vector3};
// use kiss3d::scene::SceneNode;
// use kiss3d::window::{Window, State};
// //<https://docs.speedtree.com/doku.php?id=coordinate_systems>
// // kiss = right handed y up
// // source = right handed z up
// fn hammer_to_kiss(v: Point3<f32>) -> Point3<f32> {
// Point3::new(v.y, v.z, v.x)
// }
// /// hammer to kiss coords
// fn zright_to_yright(v: Point3<f32>) -> Point3<f32> {
// Point3::new(v.y, v.z, v.x)
// }
// /// kiss to hammer coords
// fn yright_to_zright(v: Point3<f32>) -> Point3<f32> {
// Point3::new(v.z, v.x, v.y)
// }
// /// hammer to kiss coords
// fn zright_to_yright_t(v: Translation3<f32>) -> Translation3<f32> {
// Translation3::new(v.y, v.z, v.x)
// }
// // TODO: not horrible
// // TODO: acutal proc gen
// // TODO: themeing from files
// // TODO: scale, rotate, cylinder
// // TODO: disp in kiss
// // TODO: vmf tools: add cylinder with many sides
// // TODO: input graph/blocks
// // TODO: topdown/front/side tui
// struct AppState {
// scene: SceneNode,
// rot: UnitQuaternion<f32>,
// camera: FirstPerson
// }
// impl State for AppState {
// fn step(&mut self, _: &mut Window) {
// self.scene.prepend_to_local_rotation(&self.rot)
// }
// fn cameras_and_effect(
// &mut self,
// ) -> (
// Option<&mut dyn Camera>,
// Option<&mut dyn kiss3d::planar_camera::PlanarCamera>,
// Option<&mut dyn kiss3d::post_processing::PostProcessingEffect>,
// ) {
// (Some(&mut self.camera), None, None)
// }
// }
// fn main() {
// // let camera_pos = Point3::new(5.0, 2.0, 2.0);
// // -50, 250, 20
// // 2, 3, 1
// let camera_pos = Point3::new(2.0, -5.0, 3.0);
// // let camera_pos = hammer_to_kiss(Point3::new(2.0, -5.0, 2.0));
// let origin = Point3::new(0.0, 0.0, 0.0);
// let mut camera = camera::FirstPerson::new(camera_pos, origin);
// camera.rebind_up_key(Some(Key::W));
// camera.rebind_left_key(Some(Key::A));
// camera.rebind_down_key(Some(Key::S));
// camera.rebind_right_key(Some(Key::D));
// camera.set_pitch_step(0.005/2.0);
// camera.set_yaw_step(0.005/2.0);
// // set coord system to right handed z up, from right handed y up.
// // I think kiss is always right handed
// camera.set_up_axis(Vector3::new(0.0, 0.0, 1.0));
// // TODO: set_up_axis_dir
// let mut window = Window::new("Kiss3d: cube");
// let mut c_white = window.add_cube(0.75, 0.75, 0.75);
// c_white.set_color(1.0, 1.0, 1.0);
// let mut scene = c_white;
// let mut c_red = scene.add_cube(0.5, 0.5, 0.5);
// c_red.set_color(1.0, 0.0, 0.0);
// // c_red.set_local_translation(zright_to_yright_t(Translation3::new(1.0, 0.0, 0.0)));
// c_red.set_local_translation(Translation3::new(1.0, 0.0, 0.0));
// let mut c_green = scene.add_cube(0.5, 0.5, 0.5);
// c_green.set_color(0.0, 1.0, 0.0);
// // c_green.set_local_translation(zright_to_yright_t(Translation3::new(0.0, 1.0, 0.0)));
// c_green.set_local_translation(Translation3::new(0.0, 1.0, 0.0));
// let mut c_blue = scene.add_cube(0.5, 0.5, 0.5);
// c_blue.set_color(0.0, 0.0, 1.0);
// // c_blue.set_local_translation(zright_to_yright_t(Translation3::new(0.0, 0.0, 1.0)));
// c_blue.set_local_translation(Translation3::new(0.0, 0.0, 1.0));
// window.set_light(Light::StickToCamera);
// // let mut scene: SceneNode = c_white;
// // scene.add_child(c_red);
// // scene.add_child(c_green);
// // scene.add_child(c_blue);
// let rot = UnitQuaternion::from_axis_angle(&Vector3::z_axis(), 0.014);
// let state = AppState { scene, rot, camera };
// window.render_loop(state);
// // window.render_loop_with_camera(state)
// // while window.render_with_camera(&mut camera) {
// // let now = Instant::now();
// // c_white.prepend_to_local_rotation(&rot);
// // c_red.prepend_to_local_rotation(&rot);
// // c_green.prepend_to_local_rotation(&rot);
// // c_blue.prepend_to_local_rotation(&rot);
// // let frametime = now.elapsed();
// // let location = camera.eye();
// // eprint!(
// // "\rframetime:{frametime: <10?} fps: {:<10}, at {location}",
// // 1.0 / frametime.as_secs_f32()
// // );
// // const SIXTIETH: Duration = Duration::from_nanos(16666666);
// // let sleep_time = SIXTIETH - frametime;
// // sleep(sleep_time)
// // }
// }