blob: 9ca3276c73611aa4a4a08779ff55b103f4abf675 (
plain)
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
|
#pragma once
#include <glm/glm.hpp>
namespace Donut
{
// backend-agnostic scene/black-hole data shared by the Application and the
// portable renderers (SceneRenderer, BlackHoleRenderer). the rendering itself
// is written once on the RHI (rendering/rhi.h); these are just the inputs.
// the scene editor and the simulation share ONE world at this scale: this many
// grid units == one Schwarzschild radius. the SceneRenderer draws the hole's
// horizon at this radius; the BlackHoleRenderer maps scene positions into
// physical units (x SagA_rs / SCENE_UNITS_PER_RS) so placed objects line up.
constexpr float SCENE_UNITS_PER_RS = 3.0f;
// a placeable/editable sphere in the world-builder scene view. the app owns
// the list; SceneRenderer draws it the same way on every backend.
struct SceneObject
{
glm::vec3 position = { 0.0f, 2.0f, 0.0f };
float radius = 2.0f;
glm::vec3 color = { 0.85f, 0.35f, 0.2f };
};
// live-tunable black-hole / accretion-disk parameters. radii are in
// Schwarzschild radii; the inner edge is clamped to the ISCO (3 r_s).
struct BlackHoleParams
{
float disk_inner_rs = 3.0f; // inner edge (x r_s)
float disk_outer_rs = 12.0f; // outer edge (x r_s)
float temperature = 4800.0f; // Kelvin at the flux peak (disk colour)
float brightness = 0.9f; // disk exposure
float turbulence = 0.4f; // 0 = smooth physical disk
int quality_steps = 15000; // geodesic integration steps
float fov_degrees = 60.0f; // camera field of view
};
}
|