adding pseudo code

This commit is contained in:
2026-05-17 21:07:24 -07:00
parent a680840582
commit f71aab6abb

View File

@@ -404,7 +404,14 @@ Individual scope informations
the backscattering intensity receives an explicit 1.5x structural cross-section multiplier. the backscattering intensity receives an explicit 1.5x structural cross-section multiplier.
// Pseudocode for Shader/Logic // Pseudocode for Shader/Logic
float resonance = (targetLength >= wavelength * 0.4 && targetLength <= wavelength * 0.6) ? 1.5 : 1.0; // Derive range and bearing from SSBO Cartesian fields
float ch_range = sqrt(target.target_x * target.target_x + target.target_y * target.target_y);
float ch_bearing_rad = atan(target.target_x, target.target_y); // GLSL atan(y,x) measured from north
float ch_aspect_angle = ch_bearing_rad - target.course; // course is radians in SSBO
float ch_proj_width = abs(sin(ch_aspect_angle)) * target.length + abs(cos(ch_aspect_angle)) * target.beam;
float base_sigma = ch_proj_width * 2.5;
float resonance = (target.length >= wavelength * 0.4 && target.length <= wavelength * 0.6) ? 1.5 : 1.0;
float final_sigma = base_sigma * resonance; float final_sigma = base_sigma * resonance;
The 20-Mile Markers: Chain Home used crystal-controlled oscillators to create The 20-Mile Markers: Chain Home used crystal-controlled oscillators to create
@@ -490,11 +497,23 @@ Individual scope informations
Now, here is a snippet of pseudo code: Now, here is a snippet of pseudo code:
/* Uniform Variables provided by CPU */ /* Uniform Variables provided by CPU */
uniform float u_AntennaBearing; // Current rotation of knob/motor uniform float u_AntennaBearing; // Current rotation of knob/motor, degrees
uniform float horizontal_beamwidth; // Fixed for the scope (e.g., 2.5 degrees) uniform float horizontal_beamwidth; // Fixed for the scope (e.g., 2.5 degrees)
/* Logic for each Target (calculated on CPU or in Geometry Shader) */ /* Logic for each Target — all derived from SSBO fields target_x, target_y, length, beam, course */
float angle_diff = abs(target.bearing - u_AntennaBearing);
// Derive range (meters) and bearing (degrees, north-clockwise) from Cartesian SSBO fields
float target_range = sqrt(target.target_x * target.target_x + target.target_y * target.target_y);
float target_bearing_rad = atan(target.target_x, target.target_y); // GLSL atan(y,x) from north
float target_bearing_deg = degrees(target_bearing_rad);
if (target_bearing_deg < 0.0) target_bearing_deg += 360.0;
// Compute RCS from length and beam using aspect angle (course is radians in SSBO)
float aspect_angle = target_bearing_rad - target.course;
float projected_width = abs(sin(aspect_angle)) * target.length + abs(cos(aspect_angle)) * target.beam;
float target_rcs = projected_width * 2.5;
float angle_diff = abs(target_bearing_deg - u_AntennaBearing);
// Handle the 359 to 0 degree wrap-around // Handle the 359 to 0 degree wrap-around
if (angle_diff > 180.0) angle_diff = 360.0 - angle_diff; if (angle_diff > 180.0) angle_diff = 360.0 - angle_diff;
@@ -503,9 +522,9 @@ Individual scope informations
// This creates the "fade in / fade out" effect as you turn the knob // This creates the "fade in / fade out" effect as you turn the knob
float beam_factor = exp(-2.77 * pow(angle_diff / (horizontal_beamwidth / 2.0), 2.0)); float beam_factor = exp(-2.77 * pow(angle_diff / (horizontal_beamwidth / 2.0), 2.0));
// Final received power Pr // Final received power Pr — uses only derived values, no missing SSBO fields
float Pr = (peak_power * pow(antenna_gain, 2) * pow(wavelength, 2) * target.rcs * beam_factor) / float Pr = (peak_power * pow(antenna_gain, 2.0) * pow(wavelength, 2.0) * target_rcs * beam_factor) /
(pow(4.0 * PI, 3.0) * pow(target.range, 4.0)); (pow(4.0 * PI, 3.0) * pow(target_range, 4.0));
3. PPI Scope 3. PPI Scope