75 lines
1.9 KiB
C++
75 lines
1.9 KiB
C++
//
|
|
// 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;
|
|
|
|
|
|
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();
|
|
|
|
// снеговик, типа в ряд по частям по оси X
|
|
mesh_sphere->draw();
|
|
|
|
auto translate = glm::translate(glm::mat4(1.0f), glm::vec3(2, 0 ,0));
|
|
auto scale_0_5 = glm::scale(glm::mat4(1.0f), glm::vec3(0.5, 0.5 ,0.5));
|
|
|
|
shader->uniformMatrix("model", translate * scale_0_5);
|
|
mesh_sphere->draw();
|
|
|
|
shader->uniformMatrix("model", translate * translate * scale_0_5 * scale_0_5);
|
|
mesh_sphere->draw();
|
|
|
|
shader->uniformMatrix("model", translate * translate * translate * scale_0_5);
|
|
mesh_cone->draw();
|
|
}
|
|
|
|
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;
|
|
} |