Добавлен пункт 3 лабы 2

This commit is contained in:
vlad 2023-04-06 17:11:36 +03:00
parent 128ba60e21
commit 27e7c937bd
2 changed files with 110 additions and 0 deletions

View File

@ -34,3 +34,6 @@ target_link_libraries(${PROJECT_NAME}_1 ${LIBS})
add_executable(${PROJECT_NAME}_2 ${CORE_SOURCES} src/render/render-2.cpp)
target_link_libraries(${PROJECT_NAME}_2 ${LIBS})
add_executable(${PROJECT_NAME}_3 ${CORE_SOURCES} src/render/render-3.cpp)
target_link_libraries(${PROJECT_NAME}_3 ${LIBS})

View File

@ -0,0 +1,107 @@
//
// Created by vlad on 23.03.23.
//
#include "render.h"
#include "../graphics/MeshLoader.h"
#include "../graphics/Shader.h"
#include <glm/ext/matrix_transform.hpp>
static Mesh* mesh_xyz;
static Mesh* mesh_sphere;
static Mesh* mesh_cone;
static Shader* shader;
static void drawSnowman(const glm::mat4& model) {
// снеговик, типа собран
// нижний шар
shader->uniformMatrix("model", model);
mesh_sphere->draw();
// шар 2
auto translate = glm::translate(glm::mat4(1.0f), glm::vec3(0, 1.5,0));
auto scale = glm::scale(glm::mat4(1.0f), glm::vec3(0.5, 0.5 ,0.5));
shader->uniformMatrix("model", model * translate * scale);
mesh_sphere->draw();
// глаз X- (со смещением по Z)
translate = glm::translate(glm::mat4(1.0f), glm::vec3(-0.25, 1.75, 0.25));
scale = glm::scale(glm::mat4(1.0f), glm::vec3(0.25, 0.25,0.25));
shader->uniformMatrix("model", model * translate * scale);
mesh_sphere->draw();
// глаз X+ (со смещением по Z)
translate = glm::translate(glm::mat4(1.0f), glm::vec3(0.25, 1.75, 0.25));
shader->uniformMatrix("model", model * translate * scale);
mesh_sphere->draw();
// нос, (со смещением по Z)
translate = glm::translate(glm::mat4(1.0f), glm::vec3(0, 1.5, 0.5));
auto rotate = glm::rotate(glm::mat4(1.0f), glm::radians(90.0f), glm::vec3(1, 0, 0));
shader->uniformMatrix("model", model * translate * scale * rotate);
mesh_cone->draw();
}
void renderScene(Camera& cam) {
auto projview = cam.getProjection() * cam.getView();
shader->use();
shader->uniformMatrix("projview", projview);
// мировой центр
shader->uniformMatrix("model", glm::mat4(1.0f));
mesh_xyz->draw();
static float rotation_angle = 0.0f;
auto rotate = glm::rotate(glm::mat4(1.0f), rotation_angle, glm::vec3(0, 1, 0));
rotation_angle += 0.0004f;
auto translate = glm::translate(glm::mat4(1.0f), glm::vec3(1.7, 0, 0));
auto scale_0_7 = glm::scale(glm::mat4(1.0f), glm::vec3(0.7, 0.7,0.7));;
// закомментированное - вращение снеговиков вокруг себя
drawSnowman(rotate);
drawSnowman(rotate * translate * scale_0_7);
// drawSnowman(translate * scale_0_7 * rotate);
drawSnowman(rotate * translate * scale_0_7 * translate * scale_0_7);
// drawSnowman(translate * scale_0_7 * translate * scale_0_7 * rotate);
}
int loadResources() {
mesh_xyz = MeshLoader::loadMesh("res/xyz");
if (mesh_xyz == nullptr) {
std::cerr << "Failed to load 'xyz' mesh!" << std::endl;
return -1;
}
mesh_sphere = MeshLoader::loadMesh("res/sphere");
if (mesh_sphere == nullptr) {
std::cerr << "Failed to load 'sphere' mesh!" << std::endl;
return -1;
}
mesh_cone = MeshLoader::loadMesh("res/cone");
if (mesh_cone == nullptr) {
std::cerr << "Failed to load 'cone' mesh!" << std::endl;
return -1;
}
shader = Shader::loadShader("res/main-colored.vsh", "res/main-colored.fsh");
if (shader == nullptr) {
return -1;
}
return 0;
}
void unloadResources() {
delete mesh_xyz;
delete mesh_cone;
delete mesh_sphere;
delete shader;
}