WIP: bugfixing

This commit is contained in:
2022-04-24 10:27:17 +03:00
parent f9b82f4397
commit 77b267af4c
7 changed files with 142 additions and 143 deletions
+11 -11
View File
@@ -25,9 +25,9 @@ int main() {
acidrain::texture_generator tg(256, 256); acidrain::texture_generator tg(256, 256);
tg.brick(0, 50, 20, 4, glm::vec4(1), glm::vec4(0)); tg.brick(0, 50, 20, 4, glm::vec4(1), glm::vec4(0));
shared_ptr<mesh> affectedSphere = mesh_generator::sphere(10, 10); shared_ptr<mesh> affectedSphere = mesh_generator::sphere(50, 50);
// map_transform(affectedSphere, tg, 0, 0, 1.2f); map_transform(affectedSphere, tg, 0, 0, 1.2f);
// calculate_normals(*affectedSphere.get()); calculate_normals(*affectedSphere.get());
// affectedSphere = mesh_generator::cog(0.2, 0.5, 50, 4, 0.1, 0.2, 0.2, 0.1); // affectedSphere = mesh_generator::cog(0.2, 0.5, 50, 4, 0.1, 0.2, 0.2, 0.1);
@@ -125,12 +125,12 @@ int main() {
ground_plane->scale = glm::vec3(10); ground_plane->scale = glm::vec3(10);
ground_plane->rotation = glm::angleAxis(3.141529f / 2.0f, glm::vec3(1.0f, 0.0f, 0.0f)); ground_plane->rotation = glm::angleAxis(3.141529f / 2.0f, glm::vec3(1.0f, 0.0f, 0.0f));
auto black_plane = std::make_shared<mesh_node>("back plane"); auto back_plane = std::make_shared<mesh_node>("back plane");
black_plane->mesh_ = demo_data::meshes[2]; back_plane->mesh_ = demo_data::meshes[2];
black_plane->material_ = demo_data::materials[1]; back_plane->material_ = demo_data::materials[1];
black_plane->position = glm::vec3(0, 5, -5); back_plane->position = glm::vec3(0, 5, -5);
black_plane->scale = glm::vec3(10); back_plane->scale = glm::vec3(10);
black_plane->rotation = angleAxis(3.141529f, glm::vec3(1.0f, 0.0f, 0.0f)); back_plane->rotation = angleAxis(3.141529f, glm::vec3(1.0f, 0.0f, 0.0f));
auto left_plane = std::make_shared<mesh_node>("left plane"); auto left_plane = std::make_shared<mesh_node>("left plane");
left_plane->mesh_ = demo_data::meshes[2]; left_plane->mesh_ = demo_data::meshes[2];
@@ -187,7 +187,7 @@ int main() {
lightNode2->specular = glm::vec4(0.0, 0.8, 0.1, 1.0); lightNode2->specular = glm::vec4(0.0, 0.8, 0.1, 1.0);
scene1->tree->add(ground_plane); scene1->tree->add(ground_plane);
scene1->tree->add(black_plane); scene1->tree->add(back_plane);
scene1->tree->add(left_plane); scene1->tree->add(left_plane);
scene1->tree->add(right_plane); scene1->tree->add(right_plane);
@@ -210,7 +210,7 @@ int main() {
timer timer1; timer timer1;
while (!peripherals.should_close() && timer1.seconds_since_start() < DEMO_LENGTH_IN_SECONDS) { while (!peripherals.should_close() && timer1.seconds_since_start() < DEMO_LENGTH_IN_SECONDS) {
double elapsedSeconds = timer1.seconds_since_start(); double elapsedSeconds = timer1.seconds_since_start();
LOG(INFO) << "frame start";
bigSphere->mesh_ = mesh_generator::extrude(mesh_generator::sphere(50, 50), {200, 201, 100, 101, 400, 401}, 0.05, bigSphere->mesh_ = mesh_generator::extrude(mesh_generator::sphere(50, 50), {200, 201, 100, 101, 400, 401}, 0.05,
(int) ((sin(elapsedSeconds) + 0.5) * 40)); (int) ((sin(elapsedSeconds) + 0.5) * 40));
+1 -4
View File
@@ -34,8 +34,6 @@ void mesh::render(bool flat_shaded) {
// construct data // construct data
if ((facets.size() * 3) > vbo_size_in_elements) { if ((facets.size() * 3) > vbo_size_in_elements) {
if (vbo_data != nullptr)
delete[] vbo_data; delete[] vbo_data;
vbo_data = new float[componentsInVertex() * facets.size() * 3]; vbo_data = new float[componentsInVertex() * facets.size() * 3];
@@ -44,8 +42,7 @@ void mesh::render(bool flat_shaded) {
// fill in buffer // fill in buffer
size_t i = 0; size_t i = 0;
for (size_t face_index = 0; i < facets.size(); i++) { for (auto& f: facets) {
auto& f = facets[face_index];
for (int j = 0; j < 3; j++) { for (int j = 0; j < 3; j++) {
vbo_data[i++] = vertices[f.vertices[j]].position.x; vbo_data[i++] = vertices[f.vertices[j]].position.x;
vbo_data[i++] = vertices[f.vertices[j]].position.y; vbo_data[i++] = vertices[f.vertices[j]].position.y;
+1
View File
@@ -7,6 +7,7 @@ mesh_node::mesh_node() {
} }
mesh_node::mesh_node(std::string name_) { mesh_node::mesh_node(std::string name_) {
type = scene_node_type::mesh;
name = name_; name = name_;
} }
+6 -5
View File
@@ -305,26 +305,26 @@ void scene_renderer::attach_depth_texture(texture &text) const {
glBindFramebuffer(GL_FRAMEBUFFER, 0); glBindFramebuffer(GL_FRAMEBUFFER, 0);
} }
void scene_renderer::render(const scene_tree &scene, const std::string &cameraName) { void scene_renderer::render(const scene_tree &tree, const std::string &cameraName) {
// for (auto &node: scene.lights) { // for (auto &node: scene.lights) {
// light_node &light = node->as_light_node(); // light_node &light = node->as_light_node();
// glActiveTexture(GL_TEXTURE0); // glActiveTexture(GL_TEXTURE0);
// render_shadow_map(scene, light); // render_shadow_map(scene, light);
// } // }
std::shared_ptr<scene_node> camNode = scene.nodeByNameAndType(cameraName, scene_node_type::camera); std::shared_ptr<scene_node> camNode = tree.node_by_name_and_type(cameraName, scene_node_type::camera);
camera_node &camera = camNode->as_camera_node(); camera_node &camera = camNode->as_camera_node();
shader_consts.set(uniforms::ViewMatrix, camera.view_matrix); shader_consts.set(uniforms::ViewMatrix, camera.view_matrix);
shader_consts.set(uniforms::ProjectionMatrix, camera.projection_matrix); shader_consts.set(uniforms::ProjectionMatrix, camera.projection_matrix);
shader_consts.set(uniforms::NumberOfLights, (int) scene.lights.size()); shader_consts.set(uniforms::NumberOfLights, (int) tree.lights.size());
// TODO: inject this from outside // TODO: inject this from outside
// shaderConstants.set(Uniforms::DemoPartNormalizedTime, normalizedTime); // shaderConstants.set(Uniforms::DemoPartNormalizedTime, normalizedTime);
set_material(second_pass_shadow_material); set_material(second_pass_shadow_material);
int lightIndex = 0; int lightIndex = 0;
for (auto &node: scene.lights) { for (auto &node: tree.lights) {
light_node &light = node->as_light_node(); light_node &light = node->as_light_node();
shader_consts.set(uniforms::WorldToLightMatrix, light.world_to_light_matrix[0], lightIndex); shader_consts.set(uniforms::WorldToLightMatrix, light.world_to_light_matrix[0], lightIndex);
@@ -363,9 +363,10 @@ void scene_renderer::render(const scene_tree &scene, const std::string &cameraNa
} }
// draw opaque nodes // draw opaque nodes
for (auto &node: scene.nodes) { for (auto &node: tree.nodes) {
if (node->type == scene_node_type::mesh) { if (node->type == scene_node_type::mesh) {
mesh_node &meshNode = node->as_mesh_node(); mesh_node &meshNode = node->as_mesh_node();
LOG(INFO) << "rendering mesh node " << meshNode.name;
glm::mat3 normalMatrix = glm::inverseTranspose( glm::mat3 normalMatrix = glm::inverseTranspose(
glm::mat3(camera.view_matrix * meshNode.model_to_world_space_matrix)); glm::mat3(camera.view_matrix * meshNode.model_to_world_space_matrix));
+1 -1
View File
@@ -17,7 +17,7 @@ public:
scene_renderer(); scene_renderer();
void render(const scene_tree &scene, const std::string &cameraName); void render(const scene_tree &tree, const std::string &cameraName);
private: private:
void attach_depth_texture(texture &text) const; void attach_depth_texture(texture &text) const;
+1 -1
View File
@@ -10,7 +10,7 @@ std::shared_ptr<scene_node> scene_tree::nodeById(int id) const {
return std::shared_ptr<scene_node>(nullptr); return std::shared_ptr<scene_node>(nullptr);
} }
std::shared_ptr<scene_node> scene_tree::nodeByNameAndType(std::string name, scene_node_type type) const { std::shared_ptr<scene_node> scene_tree::node_by_name_and_type(std::string name, scene_node_type type) const {
for (auto& node : nodes) for (auto& node : nodes)
if (node->name == name && node->type == type) if (node->name == name && node->type == type)
return node; return node;
+1 -1
View File
@@ -9,7 +9,7 @@ class scene_tree {
public: public:
std::shared_ptr<scene_node> nodeById(int id) const; std::shared_ptr<scene_node> nodeById(int id) const;
std::shared_ptr<scene_node> nodeByNameAndType(std::string name, scene_node_type type) const; std::shared_ptr<scene_node> node_by_name_and_type(std::string name, scene_node_type type) const;
void add(std::shared_ptr<scene_node> node); void add(std::shared_ptr<scene_node> node);
void add(std::shared_ptr<scene_node> node, std::shared_ptr<scene_node> parent); void add(std::shared_ptr<scene_node> node, std::shared_ptr<scene_node> parent);