add scaling
This commit is contained in:
parent
07d4587584
commit
138db9bda3
|
@ -64,9 +64,7 @@ private:
|
||||||
return 0.5 * (rec.normal + Color(1, 1, 1));
|
return 0.5 * (rec.normal + Color(1, 1, 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
Vec3 unit_direction = unit_vector(r.direction());
|
return Color(0, 0, 0);
|
||||||
auto a = 0.5 * (unit_direction.y() + 1.0);
|
|
||||||
return (1.0 - a) * Color(1.0, 1.0, 1.0) + a * Color(0.5, 0.7, 1.0);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
13
src/main.cpp
13
src/main.cpp
|
@ -19,9 +19,13 @@ int main() {
|
||||||
std::thread render(render_thread, std::ref(buffer), std::ref(canvas));
|
std::thread render(render_thread, std::ref(buffer), std::ref(canvas));
|
||||||
|
|
||||||
SDL_Init(SDL_INIT_VIDEO);
|
SDL_Init(SDL_INIT_VIDEO);
|
||||||
SDL_Window *window =
|
int scale = 3;
|
||||||
SDL_CreateWindow("Solar System", SDL_WINDOWPOS_CENTERED,
|
SDL_Window *window = SDL_CreateWindow(
|
||||||
SDL_WINDOWPOS_CENTERED, canvas.width, canvas.height, 0);
|
"Solar System", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
|
||||||
|
canvas.width * scale, // window width
|
||||||
|
canvas.height * scale, // window height
|
||||||
|
SDL_WINDOW_RESIZABLE // optional, allows manual resize
|
||||||
|
);
|
||||||
SDL_Renderer *renderer =
|
SDL_Renderer *renderer =
|
||||||
SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
|
SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
|
||||||
SDL_Texture *texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGB24,
|
SDL_Texture *texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGB24,
|
||||||
|
@ -36,7 +40,8 @@ int main() {
|
||||||
SDL_UnlockTexture(texture);
|
SDL_UnlockTexture(texture);
|
||||||
|
|
||||||
SDL_RenderClear(renderer);
|
SDL_RenderClear(renderer);
|
||||||
SDL_RenderCopy(renderer, texture, nullptr, nullptr);
|
SDL_Rect dest = {0, 0, canvas.width * scale, canvas.height * scale};
|
||||||
|
SDL_RenderCopy(renderer, texture, nullptr, &dest);
|
||||||
SDL_RenderPresent(renderer);
|
SDL_RenderPresent(renderer);
|
||||||
|
|
||||||
SDL_Event e;
|
SDL_Event e;
|
||||||
|
|
|
@ -49,6 +49,7 @@ SimulationState initialize_solar_system() {
|
||||||
*/
|
*/
|
||||||
void simulation_thread(RingBuffer<SimulationState> &buffer) {
|
void simulation_thread(RingBuffer<SimulationState> &buffer) {
|
||||||
SimulationState state = initialize_solar_system();
|
SimulationState state = initialize_solar_system();
|
||||||
|
float BIG_G = 6.67e-11; // gravitational constant
|
||||||
float dt = 0.01; // if we didnt do this it would run too fast for render
|
float dt = 0.01; // if we didnt do this it would run too fast for render
|
||||||
std::chrono::duration<float> elapsed;
|
std::chrono::duration<float> elapsed;
|
||||||
|
|
||||||
|
@ -59,10 +60,7 @@ void simulation_thread(RingBuffer<SimulationState> &buffer) {
|
||||||
elapsed = now - last;
|
elapsed = now - last;
|
||||||
|
|
||||||
if (elapsed.count() >= dt) {
|
if (elapsed.count() >= dt) {
|
||||||
float t_0 = 0;
|
float bdt = 86400;
|
||||||
float t = t_0;
|
|
||||||
float dt = 86400;
|
|
||||||
float BIG_G = 6.67e-11; // gravitational constant
|
|
||||||
|
|
||||||
size_t n_bodies = state.bodies.size();
|
size_t n_bodies = state.bodies.size();
|
||||||
for (size_t m1_idx = 0; m1_idx < n_bodies; m1_idx++) {
|
for (size_t m1_idx = 0; m1_idx < n_bodies; m1_idx++) {
|
||||||
|
@ -95,21 +93,20 @@ void simulation_thread(RingBuffer<SimulationState> &buffer) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
state.bodies[m1_idx].velocity.x() += a_g.x() * dt;
|
state.bodies[m1_idx].velocity.x() += a_g.x() * bdt;
|
||||||
state.bodies[m1_idx].velocity.y() += a_g.y() * dt;
|
state.bodies[m1_idx].velocity.y() += a_g.y() * bdt;
|
||||||
state.bodies[m1_idx].velocity.z() += a_g.z() * dt;
|
state.bodies[m1_idx].velocity.z() += a_g.z() * bdt;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t entity_idx = 0; entity_idx < n_bodies; entity_idx++) {
|
for (size_t entity_idx = 0; entity_idx < n_bodies; entity_idx++) {
|
||||||
state.bodies[entity_idx].position.x() +=
|
state.bodies[entity_idx].position.x() +=
|
||||||
state.bodies[entity_idx].velocity.x() * dt;
|
state.bodies[entity_idx].velocity.x() * bdt;
|
||||||
state.bodies[entity_idx].position.y() +=
|
state.bodies[entity_idx].position.y() +=
|
||||||
state.bodies[entity_idx].velocity.y() * dt;
|
state.bodies[entity_idx].velocity.y() * bdt;
|
||||||
state.bodies[entity_idx].position.z() +=
|
state.bodies[entity_idx].position.z() +=
|
||||||
state.bodies[entity_idx].velocity.z() * dt;
|
state.bodies[entity_idx].velocity.z() * bdt;
|
||||||
}
|
}
|
||||||
|
|
||||||
t += dt;
|
|
||||||
// Try to push it into the buffer
|
// Try to push it into the buffer
|
||||||
while (!buffer.push(state)) {
|
while (!buffer.push(state)) {
|
||||||
// Buffer full, drop or wait (e.g. yield or sleep)
|
// Buffer full, drop or wait (e.g. yield or sleep)
|
||||||
|
@ -131,7 +128,7 @@ void render_thread(RingBuffer<SimulationState> &buffer, Canvas &canvas) {
|
||||||
Camera cam;
|
Camera cam;
|
||||||
cam.aspect_ratio = 16.0 / 9.0;
|
cam.aspect_ratio = 16.0 / 9.0;
|
||||||
cam.image_width = 400;
|
cam.image_width = 400;
|
||||||
cam.move_to(Point3(0, 0, 100));
|
cam.move_to(Point3(0, 10, 100));
|
||||||
|
|
||||||
while (running) {
|
while (running) {
|
||||||
auto maybe_state = buffer.pop();
|
auto maybe_state = buffer.pop();
|
||||||
|
|
Loading…
Reference in New Issue