added files
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
#pragma once
|
||||
|
||||
#include "GLFunctions.hpp"
|
||||
|
||||
#include <glm/glm.hpp>
|
||||
#include <vector>
|
||||
|
||||
namespace planetarium {
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// Mesh
|
||||
//
|
||||
// Owns a VAO/VBO/(optional)EBO describing an interleaved
|
||||
// position+normal+uv vertex stream, plus static factory methods that
|
||||
// procedurally build a few common primitive shapes (spheres, rings,
|
||||
// circles) so a project has no dependency on external model files.
|
||||
// -----------------------------------------------------------------------
|
||||
struct Vertex {
|
||||
glm::vec3 position;
|
||||
glm::vec3 normal;
|
||||
glm::vec2 uv;
|
||||
};
|
||||
|
||||
class Mesh {
|
||||
public:
|
||||
Mesh() = default;
|
||||
~Mesh();
|
||||
|
||||
Mesh(const Mesh&) = delete;
|
||||
Mesh& operator=(const Mesh&) = delete;
|
||||
Mesh(Mesh&& other) noexcept;
|
||||
Mesh& operator=(Mesh&& other) noexcept;
|
||||
|
||||
void upload(const std::vector<Vertex>& vertices, const std::vector<unsigned int>& indices);
|
||||
void uploadLineStrip(const std::vector<glm::vec3>& points);
|
||||
void draw() const;
|
||||
void drawLineStrip() const;
|
||||
|
||||
static Mesh createUVSphere(int stacks, int slices);
|
||||
static Mesh createRing(float innerRadius, float outerRadius, int segments);
|
||||
static Mesh createOrbitCircle(int segments); // unit circle in XZ
|
||||
|
||||
private:
|
||||
void release();
|
||||
|
||||
GLuint vao_ = 0;
|
||||
GLuint vbo_ = 0;
|
||||
GLuint ebo_ = 0;
|
||||
GLsizei indexCount_ = 0;
|
||||
GLsizei vertexCount_ = 0;
|
||||
bool isLineStrip_ = false;
|
||||
};
|
||||
|
||||
} // namespace planetarium
|
||||
Reference in New Issue
Block a user