mirror of
https://github.com/Relintai/sfw.git
synced 2024-11-08 07:52:09 +01:00
Added more helper methods to Mesh.
This commit is contained in:
parent
e3b62728bb
commit
1782ec9348
@ -8,17 +8,34 @@ void Mesh::add_vertex2(float x, float y) {
|
|||||||
vertices.push_back(x);
|
vertices.push_back(x);
|
||||||
vertices.push_back(y);
|
vertices.push_back(y);
|
||||||
}
|
}
|
||||||
|
void Mesh::add_vertex2(const Vector2 &v) {
|
||||||
|
vertices.push_back(v.x);
|
||||||
|
vertices.push_back(v.y);
|
||||||
|
}
|
||||||
|
|
||||||
void Mesh::add_vertex3(float x, float y, float z) {
|
void Mesh::add_vertex3(float x, float y, float z) {
|
||||||
vertices.push_back(x);
|
vertices.push_back(x);
|
||||||
vertices.push_back(y);
|
vertices.push_back(y);
|
||||||
vertices.push_back(z);
|
vertices.push_back(z);
|
||||||
}
|
}
|
||||||
|
void Mesh::add_vertex3(const Vector3 &v) {
|
||||||
|
vertices.push_back(v.x);
|
||||||
|
vertices.push_back(v.y);
|
||||||
|
vertices.push_back(v.z);
|
||||||
|
}
|
||||||
|
|
||||||
void Mesh::add_normal(float x, float y, float z) {
|
void Mesh::add_normal(float x, float y, float z) {
|
||||||
normals.push_back(x);
|
normals.push_back(x);
|
||||||
normals.push_back(y);
|
normals.push_back(y);
|
||||||
normals.push_back(z);
|
normals.push_back(z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Mesh::add_normal(const Vector3 &n) {
|
||||||
|
normals.push_back(n.x);
|
||||||
|
normals.push_back(n.y);
|
||||||
|
normals.push_back(n.z);
|
||||||
|
}
|
||||||
|
|
||||||
void Mesh::add_color(float r, float g, float b, float a) {
|
void Mesh::add_color(float r, float g, float b, float a) {
|
||||||
colors.push_back(r);
|
colors.push_back(r);
|
||||||
colors.push_back(g);
|
colors.push_back(g);
|
||||||
@ -36,6 +53,10 @@ void Mesh::add_uv(float u, float v) {
|
|||||||
uvs.push_back(u);
|
uvs.push_back(u);
|
||||||
uvs.push_back(v);
|
uvs.push_back(v);
|
||||||
}
|
}
|
||||||
|
void Mesh::add_uv(const Vector2 &uv) {
|
||||||
|
uvs.push_back(uv.x);
|
||||||
|
uvs.push_back(uv.y);
|
||||||
|
}
|
||||||
|
|
||||||
void Mesh::add_index(uint32_t index) {
|
void Mesh::add_index(uint32_t index) {
|
||||||
indices.push_back(index);
|
indices.push_back(index);
|
||||||
@ -66,6 +87,49 @@ void Mesh::flip_faces() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Mesh::fill_colors(const Color &p_color) {
|
||||||
|
while (colors.size() % 4 != 0) {
|
||||||
|
colors.push_back(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int needed_color_count = get_vertex_count() * 4;
|
||||||
|
|
||||||
|
if (colors.size() > needed_color_count) {
|
||||||
|
colors.resize(needed_color_count);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (colors.size() < needed_color_count) {
|
||||||
|
colors.push_back(p_color.r);
|
||||||
|
colors.push_back(p_color.g);
|
||||||
|
colors.push_back(p_color.b);
|
||||||
|
colors.push_back(p_color.a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Mesh::fill_colors_random() {
|
||||||
|
while (colors.size() % 4 != 0) {
|
||||||
|
colors.push_back(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int needed_color_count = get_vertex_count() * 4;
|
||||||
|
|
||||||
|
if (colors.size() > needed_color_count) {
|
||||||
|
colors.resize(needed_color_count);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RandomPCG r;
|
||||||
|
r.randomize();
|
||||||
|
|
||||||
|
while (colors.size() < needed_color_count) {
|
||||||
|
colors.push_back(r.randf());
|
||||||
|
colors.push_back(r.randf());
|
||||||
|
colors.push_back(r.randf());
|
||||||
|
colors.push_back(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Mesh::update_aabb() {
|
void Mesh::update_aabb() {
|
||||||
aabb = AABB();
|
aabb = AABB();
|
||||||
|
|
||||||
@ -233,6 +297,10 @@ void Mesh::render() {
|
|||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Mesh::get_vertex_count() const {
|
||||||
|
return vertices.size() / vertex_dimesions;
|
||||||
|
}
|
||||||
|
|
||||||
Mesh::Mesh() {
|
Mesh::Mesh() {
|
||||||
VBO = 0;
|
VBO = 0;
|
||||||
IBO = 0;
|
IBO = 0;
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
#define MESH_H
|
#define MESH_H
|
||||||
|
|
||||||
//--STRIP
|
//--STRIP
|
||||||
#include "core/vector.h"
|
|
||||||
#include "core/int_types.h"
|
|
||||||
#include "core/color.h"
|
|
||||||
#include "core/aabb.h"
|
#include "core/aabb.h"
|
||||||
|
#include "core/color.h"
|
||||||
|
#include "core/int_types.h"
|
||||||
|
#include "core/vector.h"
|
||||||
|
|
||||||
#include "object/resource.h"
|
#include "object/resource.h"
|
||||||
|
|
||||||
@ -16,19 +16,29 @@ class Mesh : public Resource {
|
|||||||
SFW_OBJECT(Mesh, Resource);
|
SFW_OBJECT(Mesh, Resource);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
//TODO remove the float based api
|
||||||
|
|
||||||
void add_vertex2(float x, float y);
|
void add_vertex2(float x, float y);
|
||||||
|
void add_vertex2(const Vector2 &v);
|
||||||
|
|
||||||
void add_vertex3(float x, float y, float z);
|
void add_vertex3(float x, float y, float z);
|
||||||
|
void add_vertex3(const Vector3 &v);
|
||||||
|
|
||||||
void add_normal(float x, float y, float z);
|
void add_normal(float x, float y, float z);
|
||||||
|
void add_normal(const Vector3 &n);
|
||||||
|
|
||||||
void add_color(float r = 1, float g = 1, float b = 1, float a = 1);
|
void add_color(float r = 1, float g = 1, float b = 1, float a = 1);
|
||||||
void add_color(const Color &p_color);
|
void add_color(const Color &p_color);
|
||||||
|
|
||||||
void add_uv(float u, float v);
|
void add_uv(float u, float v);
|
||||||
|
void add_uv(const Vector2 &uv);
|
||||||
|
|
||||||
void add_index(uint32_t index);
|
void add_index(uint32_t index);
|
||||||
void add_triangle(uint32_t i1, uint32_t i2, uint32_t i3);
|
void add_triangle(uint32_t i1, uint32_t i2, uint32_t i3);
|
||||||
|
|
||||||
void flip_faces();
|
void flip_faces();
|
||||||
|
void fill_colors(const Color &p_color);
|
||||||
|
void fill_colors_random();
|
||||||
|
|
||||||
void update_aabb();
|
void update_aabb();
|
||||||
|
|
||||||
@ -38,6 +48,8 @@ public:
|
|||||||
void destroy();
|
void destroy();
|
||||||
void render();
|
void render();
|
||||||
|
|
||||||
|
int get_vertex_count() const;
|
||||||
|
|
||||||
Mesh();
|
Mesh();
|
||||||
Mesh(int vert_dim);
|
Mesh(int vert_dim);
|
||||||
virtual ~Mesh();
|
virtual ~Mesh();
|
||||||
|
Loading…
Reference in New Issue
Block a user