MXVK Vulkan Framework 0.24.0
C++20 Vulkan rendering framework for practical 2D and 3D application development with SDL3.
Loading...
Searching...
No Matches
space::StarField Class Reference

Manages and renders a camera-centered field of animated stars. More...

#include <examples/asteroids-net/starfield.hpp>

Public Member Functions

void draw ()
 Submits the current stars to the assigned sprite batch.
void draw ()
void init (int star_count, float min_radius, float max_radius)
 Creates the stars.
void init (int star_count, float min_radius, float max_radius)
void resize (mxvk::VK_Window *window)
 Updates rendering resources after a window-size change.
void resize (mxvk::VK_Window *window)
void setSprite (mxvk::VK_Sprite3D *sprite_batch)
 Assigns the non-owning sprite batch used to render stars.
void setSprite (mxvk::VK_Sprite3D *sprite_batch)
 StarField ()=default
 Creates an uninitialized starfield.
 StarField ()=default
void update (float delta_time, const glm::vec3 &camera_position, float elapsed_time)
 Advances star movement and twinkling.
void update (float delta_time, const glm::vec3 &camera_position, float elapsed_time)

Detailed Description

Manages and renders a camera-centered field of animated stars.

Definition at line 22 of file starfield.hpp.

Constructor & Destructor Documentation

◆ StarField() [1/2]

space::StarField::StarField ( )
default

Creates an uninitialized starfield.

◆ StarField() [2/2]

space::StarField::StarField ( )
default

Member Function Documentation

◆ draw() [1/2]

void space::StarField::draw ( )

Submits the current stars to the assigned sprite batch.

Definition at line 50 of file starfield.cpp.

50 {
51 if (sprite == nullptr) {
52 return;
53 }
54 for (const auto &star : stars) {
55 sprite->drawSprite(star.position, glm::vec2(star.size), star.color);
56 }
57 }

◆ draw() [2/2]

void space::StarField::draw ( )

◆ init() [1/2]

void space::StarField::init ( int star_count,
float min_radius,
float max_radius )

Creates the stars.

Parameters
star_countNumber of stars.
min_radiusInner spawn radius.
max_radiusOuter spawn radius.

Definition at line 7 of file starfield.cpp.

7 {
8 if (initialized) {
9 return;
10 }
11
12 stars.resize(static_cast<size_t>(star_count));
13 this->min_radius = min_radius;
14 this->max_radius = max_radius;
15 for (auto &star : stars) {
16 respawn(star, glm::vec3(0.0f));
17 }
18 initialized = true;
19 }

◆ init() [2/2]

void space::StarField::init ( int star_count,
float min_radius,
float max_radius )

◆ resize() [1/2]

void space::StarField::resize ( mxvk::VK_Window * window)

Updates rendering resources after a window-size change.

Parameters
windowActive rendering window.

Definition at line 25 of file starfield.cpp.

25 {
26 if (sprite != nullptr) {
27 sprite->resize(window);
28 }
29 }

◆ resize() [2/2]

void space::StarField::resize ( mxvk::VK_Window * window)

◆ setSprite() [1/2]

void space::StarField::setSprite ( mxvk::VK_Sprite3D * sprite_batch)

Assigns the non-owning sprite batch used to render stars.

Parameters
sprite_batchSprite batch, which must outlive this object.

Definition at line 21 of file starfield.cpp.

21 {
22 sprite = sprite_batch;
23 }

◆ setSprite() [2/2]

void space::StarField::setSprite ( mxvk::VK_Sprite3D * sprite_batch)

◆ update() [1/2]

void space::StarField::update ( float delta_time,
const glm::vec3 & camera_position,
float elapsed_time )

Advances star movement and twinkling.

Parameters
delta_timeFrame duration in seconds.
camera_positionCurrent camera position.
elapsed_timeTotal elapsed time in seconds.

Definition at line 31 of file starfield.cpp.

31 {
32 for (auto &star : stars) {
33 star.position += star.velocity * delta_time;
34 const float distance = glm::length(star.position - camera_position);
35 if (distance > max_radius * 1.2f || distance < min_radius * 0.35f) {
36 respawn(star, camera_position);
37 }
38
39 const float twinkle = 0.65f + 0.35f * std::sin(elapsed_time * star.twinkle_speed + star.twinkle_phase);
40 const float fade = std::clamp(1.0f - ((distance - min_radius) / (max_radius - min_radius)), 0.2f, 0.7f);
41 const float brightness = star.brightness * twinkle * fade;
42 star.color = glm::vec4(
43 std::clamp(star.base_color.r * brightness, 0.0f, 1.0f),
44 std::clamp(star.base_color.g * brightness, 0.0f, 1.0f),
45 std::clamp(star.base_color.b * brightness, 0.0f, 1.0f),
46 std::clamp(0.2f + brightness, 0.0f, 1.0f));
47 }
48 }

◆ update() [2/2]

void space::StarField::update ( float delta_time,
const glm::vec3 & camera_position,
float elapsed_time )

The documentation for this class was generated from the following files: