Browse Source

add a focus_camera function to rederer for debugging

main
cinnaboot 6 months ago
parent
commit
45bb58dfdf
  1. 14
      src/main.cpp
  2. 6
      src/renderer.cpp
  3. 1
      src/renderer.h

14
src/main.cpp

@ -8,7 +8,8 @@
#include <cmath>
// Configuration defaults - edit to change default run mode
#define DEFAULT_CONFIG_FILE "configs/test_simple.toml"
//#define DEFAULT_CONFIG_FILE "configs/test_simple.toml"
#define DEFAULT_CONFIG_FILE "tests/configs/solar_system.toml"
struct ProgramArgs {
const char* config_file;
@ -64,7 +65,18 @@ void run_gui_simulation(SimulationState* sim) {
printf("Speed multiplier: %.1fx\n", speed_multiplier);
}
#if 0
/****
* Hacks ahead...
*/
int focus_index = 9;
if (sim->body_count >= focus_index) {
Vector3 offset = {0, 100, 100};
focus_camera(&render_state, &sim->bodies[focus_index], offset);
}
#else
update_camera(&render_state);
#endif
if (!paused) {
int steps = (int)(physics_steps_per_frame * speed_multiplier);

6
src/renderer.cpp

@ -80,6 +80,12 @@ Vector3 sim_to_render(Vec3 pos, double scale) {
};
}
void focus_camera(RenderState* render_state, CelestialBody* body, Vector3& offset) {
Vector3 p = sim_to_render(body->position, render_state->distance_scale);
render_state->camera.position = (Vector3){ p.x, p.y + offset.y, p.z + offset.z};
render_state->camera.target = p;
}
// Scale a radius for rendering (with minimum visible size)
float scale_radius(double radius, double scale) {
float scaled = (float)(radius * scale);

1
src/renderer.h

@ -19,6 +19,7 @@ void close_renderer();
// Camera setup and control
void setup_camera(RenderState* render_state);
void update_camera(RenderState* render_state);
void focus_camera(RenderState* render_state, CelestialBody* body, Vector3& offset);
// Rendering functions
void render_body(CelestialBody* body, RenderState* render_state);

Loading…
Cancel
Save