WIP: bugfixing
This commit is contained in:
+3
-2
@@ -43,8 +43,9 @@ void mesh::render(bool flat_shaded) {
|
||||
}
|
||||
|
||||
// fill in buffer
|
||||
int i = 0;
|
||||
for (auto &f: facets) {
|
||||
size_t i = 0;
|
||||
for (size_t face_index = 0; i < facets.size(); i++) {
|
||||
auto& f = facets[face_index];
|
||||
for (int j = 0; j < 3; j++) {
|
||||
vbo_data[i++] = vertices[f.vertices[j]].position.x;
|
||||
vbo_data[i++] = vertices[f.vertices[j]].position.y;
|
||||
|
||||
+15
-15
@@ -79,7 +79,7 @@ std::shared_ptr<mesh> mesh_generator::cube() {
|
||||
}
|
||||
|
||||
|
||||
std::shared_ptr<mesh> mesh_generator::sphere(int lon_points, int lat_points) {
|
||||
std::shared_ptr<mesh> mesh_generator::sphere(size_t lon_points, size_t lat_points) {
|
||||
mesh *result = new mesh;
|
||||
|
||||
vertex v{};
|
||||
@@ -91,12 +91,12 @@ std::shared_ptr<mesh> mesh_generator::sphere(int lon_points, int lat_points) {
|
||||
double du = 1.0 / static_cast<double>(lon_points);
|
||||
double dv = 1.0 / static_cast<double>(lat_points + 1);
|
||||
|
||||
for (int j = 0; j < lat_points; j++) {
|
||||
for (size_t j = 0; j < lat_points; j++) {
|
||||
|
||||
y = 1.0 - (j + 1) * 2.0 / static_cast<double>(lat_points + 1);
|
||||
double current_circle_radius = sin(M_PI * (j + 1) / static_cast<double>(lat_points + 1));
|
||||
|
||||
for (int i = 0; i < lon_points; i++) {
|
||||
for (size_t i = 0; i < lon_points; i++) {
|
||||
|
||||
x = current_circle_radius * cos((i * 2.0 * M_PI) / static_cast<double>(lon_points));
|
||||
z = current_circle_radius * sin((i * 2.0 * M_PI) / static_cast<double>(lon_points));
|
||||
@@ -105,10 +105,10 @@ std::shared_ptr<mesh> mesh_generator::sphere(int lon_points, int lat_points) {
|
||||
result->vertices.push_back(v);
|
||||
|
||||
if (j > 0) {
|
||||
int current_vertex_index = j * lon_points + i;
|
||||
int new_vertex_index = j * lon_points + ((i + 1) % lon_points);
|
||||
int top_vertex_index = (j - 1) * lon_points + i;
|
||||
int top_next_vertex_index = (j - 1) * lon_points + ((i + 1) % lon_points);
|
||||
size_t current_vertex_index = j * lon_points + i;
|
||||
size_t new_vertex_index = j * lon_points + ((i + 1) % lon_points);
|
||||
size_t top_vertex_index = (j - 1) * lon_points + i;
|
||||
size_t top_next_vertex_index = (j - 1) * lon_points + ((i + 1) % lon_points);
|
||||
|
||||
glm::vec2 current_uv = glm::vec2(i * du, (j + 2) * dv);
|
||||
glm::vec2 next_uv = glm::vec2((i + 1) * du, (j + 2) * dv);
|
||||
@@ -150,11 +150,11 @@ std::shared_ptr<mesh> mesh_generator::sphere(int lon_points, int lat_points) {
|
||||
v.position = glm::vec3(0, 1.0, 0);
|
||||
result->vertices.push_back(v);
|
||||
|
||||
int top_vertex_index = lon_points * lat_points;
|
||||
for (int i = 0; i < lon_points; i++) {
|
||||
size_t top_vertex_index = lon_points * lat_points;
|
||||
for (size_t i = 0; i < lon_points; i++) {
|
||||
|
||||
int current_vertex_index = i;
|
||||
int new_vertex_index = (current_vertex_index + 1) % lon_points;
|
||||
size_t current_vertex_index = i;
|
||||
size_t new_vertex_index = (current_vertex_index + 1) % lon_points;
|
||||
|
||||
glm::vec2 current_uv = glm::vec2(i * du, dv);
|
||||
glm::vec2 next_uv = glm::vec2((i + 1) * du, dv);
|
||||
@@ -178,11 +178,11 @@ std::shared_ptr<mesh> mesh_generator::sphere(int lon_points, int lat_points) {
|
||||
v.position = glm::vec3(0, -1.0, 0);
|
||||
result->vertices.push_back(v);
|
||||
|
||||
int bottom_vertex_index = top_vertex_index + 1;
|
||||
for (int i = 0; i < lon_points; i++) {
|
||||
size_t bottom_vertex_index = top_vertex_index + 1;
|
||||
for (size_t i = 0; i < lon_points; i++) {
|
||||
|
||||
int current_vertex_index = i + (lat_points - 1) * lon_points;
|
||||
int next_vertex_index = (i + 1) % lon_points + (lat_points - 1) * lon_points;
|
||||
size_t current_vertex_index = i + (lat_points - 1) * lon_points;
|
||||
size_t next_vertex_index = (i + 1) % lon_points + (lat_points - 1) * lon_points;
|
||||
|
||||
glm::vec2 current_uv = glm::vec2(i * du, 1.0 - dv);
|
||||
glm::vec2 next_uv = glm::vec2((i + 1) * du, 1.0 - dv);
|
||||
|
||||
@@ -8,7 +8,7 @@ BEGIN_NAMESPACE
|
||||
struct mesh_generator {
|
||||
|
||||
static std::shared_ptr<mesh> cube();
|
||||
static std::shared_ptr<mesh> sphere(int lon_points, int lat_points);
|
||||
static std::shared_ptr<mesh> sphere(size_t lon_points, size_t lat_points);
|
||||
static std::shared_ptr<mesh> grid(int x_segments, int y_segments);
|
||||
static std::shared_ptr<mesh> cylinder(int x_segments, int y_segments, bool cap_top, bool cap_botton);
|
||||
static std::shared_ptr<mesh> revolve(const std::vector<glm::vec2> &contour, int rotation_steps);
|
||||
|
||||
@@ -6,4 +6,8 @@ mesh_node::mesh_node() {
|
||||
type = scene_node_type::mesh;
|
||||
}
|
||||
|
||||
mesh_node::mesh_node(std::string name_) {
|
||||
name = name_;
|
||||
}
|
||||
|
||||
END_NAMESPACE
|
||||
@@ -8,6 +8,7 @@ BEGIN_NAMESPACE
|
||||
|
||||
struct mesh_node : scene_node {
|
||||
mesh_node();
|
||||
mesh_node(std::string name);
|
||||
|
||||
std::shared_ptr<mesh> mesh_;
|
||||
std::shared_ptr<material> material_;
|
||||
|
||||
@@ -2,11 +2,12 @@
|
||||
#include <GLFW/glfw3.h>
|
||||
#include <iostream>
|
||||
#include "demo_data.h"
|
||||
#include "defines.h"
|
||||
|
||||
BEGIN_NAMESPACE
|
||||
|
||||
static void error_callback(int error, const char* description) {
|
||||
std::cerr << "GLFW error callback. Error: " << error << ", " << description << std::endl;
|
||||
LOG(ERROR) << "glfw error callback: " << error << ", " << description;
|
||||
}
|
||||
|
||||
static void window_size_callback(GLFWwindow* window, int width, int height) {
|
||||
@@ -31,13 +32,13 @@ bool peripherals_glfw::init() {
|
||||
|
||||
window = glfwCreateWindow(demo_data::screen_width, demo_data::screen_height, "Demo", nullptr, nullptr);
|
||||
if (window == nullptr) {
|
||||
std::cerr << "Unable to create window!" << std::endl;
|
||||
LOG(FATAL) << "unable to create window!";
|
||||
return false;
|
||||
}
|
||||
|
||||
glfwMakeContextCurrent(window);
|
||||
if (window == nullptr) {
|
||||
std::cerr << "Unable to create window2!" << std::endl;
|
||||
LOG(FATAL) << "unable to make opengl context current!";
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -45,10 +46,10 @@ bool peripherals_glfw::init() {
|
||||
glfwSetWindowSizeCallback(window, window_size_callback);
|
||||
|
||||
if (!gladLoadGL()) {
|
||||
std::cerr << "Unable to load OpenGL functions!" << std::endl;
|
||||
LOG(FATAL) << "unable to load opengl functions!";
|
||||
return false;
|
||||
} else {
|
||||
std::cout << "Successfully created window and loaded GL" << std::endl;
|
||||
LOG(INFO) << "created window and loaded opengl";
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -188,11 +188,11 @@ texture_generator &texture_generator::brick(uint8_t layer,
|
||||
|
||||
auto *input = reinterpret_cast<uint32_t *>(layers[layer]);
|
||||
|
||||
uint32_t mortar = as_int(mortar_col);
|
||||
uint32_t brick = as_int(brick_col);
|
||||
uint32_t mortar_color = as_int(mortar_col);
|
||||
uint32_t brick_color = as_int(brick_col);
|
||||
|
||||
for (int i = 0; i < width * height; i++) {
|
||||
input[i] = brick;
|
||||
input[i] = brick_color;
|
||||
}
|
||||
|
||||
int y = 0;
|
||||
@@ -200,7 +200,7 @@ texture_generator &texture_generator::brick(uint8_t layer,
|
||||
for (int i = 0; i < gap_size; i++) {
|
||||
if ((y + i) < height) {
|
||||
for (int x = 0; x < width; x++) {
|
||||
input[x + (y + i) * width] = mortar;
|
||||
input[x + (y + i) * width] = mortar_color;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -214,8 +214,10 @@ texture_generator &texture_generator::brick(uint8_t layer,
|
||||
int x = is_odd_row ? 0 : brick_width / 2;
|
||||
while (x < width) {
|
||||
for (int i = 0; i < gap_size; i++) {
|
||||
for (int current_brick_y = 0; current_brick_y < brick_height; current_brick_y++) {
|
||||
input[x + i + (current_brick_y + y) * width] = mortar;
|
||||
for (int current_brick_y = 0; current_brick_y < (brick_height - 1); current_brick_y++) {
|
||||
// if ((current_brick_y + y) < height) {
|
||||
input[x + i + (current_brick_y + y) * width] = mortar_color;
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user