MXVK Vulkan Framework 0.35.0
C++20 Vulkan rendering framework for practical 2D and 3D application development with SDL3.
Loading...
Searching...
No Matches
anonymous_namespace{main.cpp}::Mesh Struct Reference

Static Public Member Functions

static Mesh cube ()
static Mesh sphere (int latitude_segments, int longitude_segments)

Public Attributes

std::vector< Triangle > triangles
bool two_sided = false
std::vector< mxvk::vec4D > vertices

Detailed Description

Definition at line 49 of file main.cpp.

Member Function Documentation

◆ cube()

Mesh anonymous_namespace{main.cpp}::Mesh::cube ( )
inlinestaticnodiscard

Definition at line 54 of file main.cpp.

54 {
55 return {
56 {
57 {-1.0f, -1.0f, -1.0f, 1.0f},
58 {1.0f, -1.0f, -1.0f, 1.0f},
59 {1.0f, 1.0f, -1.0f, 1.0f},
60 {-1.0f, 1.0f, -1.0f, 1.0f},
61 {-1.0f, -1.0f, 1.0f, 1.0f},
62 {1.0f, -1.0f, 1.0f, 1.0f},
63 {1.0f, 1.0f, 1.0f, 1.0f},
64 {-1.0f, 1.0f, 1.0f, 1.0f},
65 },
66 {
67 {{0, 3, 2}},
68 {{0, 2, 1}},
69 {{4, 5, 6}},
70 {{4, 6, 7}},
71 {{0, 4, 7}},
72 {{0, 7, 3}},
73 {{1, 2, 6}},
74 {{1, 6, 5}},
75 {{3, 7, 6}},
76 {{3, 6, 2}},
77 {{0, 1, 5}},
78 {{0, 5, 4}},
79 },
80 };
81 }

◆ sphere()

Mesh anonymous_namespace{main.cpp}::Mesh::sphere ( int latitude_segments,
int longitude_segments )
inlinestaticnodiscard

Definition at line 83 of file main.cpp.

83 {
84 Mesh mesh;
85 mesh.two_sided = true;
86 for (int latitude = 0; latitude <= latitude_segments; ++latitude) {
87 const float phi = static_cast<float>(latitude) * mxvk::PI / static_cast<float>(latitude_segments);
88 const float ring_radius = std::sin(phi);
89 const float y = std::cos(phi);
90 for (int longitude = 0; longitude <= longitude_segments; ++longitude) {
91 const float theta = static_cast<float>(longitude) * 2.0f * mxvk::PI / static_cast<float>(longitude_segments);
92 mesh.vertices.emplace_back(ring_radius * std::cos(theta), y, ring_radius * std::sin(theta), 1.0f);
93 }
94 }
95
96 const std::size_t row_size = static_cast<std::size_t>(longitude_segments + 1);
97 for (int latitude = 0; latitude < latitude_segments; ++latitude) {
98 for (int longitude = 0; longitude < longitude_segments; ++longitude) {
99 const std::size_t first = static_cast<std::size_t>(latitude) * row_size + static_cast<std::size_t>(longitude);
100 const std::size_t second = first + row_size;
101 mesh.triangles.push_back({{first, second, first + 1}});
102 mesh.triangles.push_back({{first + 1, second, second + 1}});
103 }
104 }
105 return mesh;
106 }
constexpr float PI
Mathematical constant pi as a single-precision value.
Definition mxvk_math.h:34

Member Data Documentation

◆ triangles

std::vector<Triangle> anonymous_namespace{main.cpp}::Mesh::triangles

Definition at line 51 of file main.cpp.

◆ two_sided

bool anonymous_namespace{main.cpp}::Mesh::two_sided = false

Definition at line 52 of file main.cpp.

◆ vertices

std::vector<mxvk::vec4D> anonymous_namespace{main.cpp}::Mesh::vertices

Definition at line 50 of file main.cpp.


The documentation for this struct was generated from the following file: