MXVK Vulkan Framework 0.33.1
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< Triangletriangles
bool two_sided = false
std::vector< mxvk::vec4Dvertices

Detailed Description

Definition at line 51 of file main.cpp.

Member Function Documentation

◆ cube()

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

Definition at line 56 of file main.cpp.

56 {
57 return {
58 {
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 {1.0f, 1.0f, 1.0f, 1.0f},
66 {-1.0f, 1.0f, 1.0f, 1.0f},
67 },
68 {
69 {{0, 3, 2}},
70 {{0, 2, 1}},
71 {{4, 5, 6}},
72 {{4, 6, 7}},
73 {{0, 4, 7}},
74 {{0, 7, 3}},
75 {{1, 2, 6}},
76 {{1, 6, 5}},
77 {{3, 7, 6}},
78 {{3, 6, 2}},
79 {{0, 1, 5}},
80 {{0, 5, 4}},
81 },
82 };
83 }

◆ sphere()

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

Definition at line 85 of file main.cpp.

85 {
86 Mesh mesh;
87 mesh.two_sided = true;
88 for (int latitude = 0; latitude <= latitude_segments; ++latitude) {
89 const float phi = static_cast<float>(latitude) * mxvk::PI / static_cast<float>(latitude_segments);
90 const float ring_radius = std::sin(phi);
91 const float y = std::cos(phi);
92 for (int longitude = 0; longitude <= longitude_segments; ++longitude) {
93 const float theta = static_cast<float>(longitude) * 2.0f * mxvk::PI / static_cast<float>(longitude_segments);
94 mesh.vertices.emplace_back(
95 ring_radius * std::cos(theta),
96 y,
97 ring_radius * std::sin(theta),
98 1.0f);
99 }
100 }
101
102 const std::size_t row_size = static_cast<std::size_t>(longitude_segments + 1);
103 for (int latitude = 0; latitude < latitude_segments; ++latitude) {
104 for (int longitude = 0; longitude < longitude_segments; ++longitude) {
105 const std::size_t first =
106 static_cast<std::size_t>(latitude) * row_size +
107 static_cast<std::size_t>(longitude);
108 const std::size_t second = first + row_size;
109 mesh.triangles.push_back({{first, second, first + 1}});
110 mesh.triangles.push_back({{first + 1, second, second + 1}});
111 }
112 }
113 return mesh;
114 }
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 53 of file main.cpp.

◆ two_sided

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

Definition at line 54 of file main.cpp.

◆ vertices

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

Definition at line 52 of file main.cpp.


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