Compare commits
2 Commits
Author | SHA1 | Date |
---|---|---|
Ковалев Роман Евгеньевич | 4b43d0efad | |
Ковалев Роман Евгеньевич | e64d62b56f |
|
@ -59,7 +59,7 @@ class Model : public Node
|
|||
Model& operator=(const Model& other); // Оператор присваивания
|
||||
virtual ~Model();
|
||||
|
||||
void render(); // Вызов отрисовки
|
||||
void render(const GLuint &model_uniform); // Вызов отрисовки
|
||||
|
||||
void load_verteces(glm::vec3* verteces, GLuint count); // Загрузка вершин в буфер
|
||||
void load_indices(GLuint* indices, GLuint count); // Загрузка индексов в буфер
|
||||
|
|
|
@ -14,7 +14,7 @@ class Scene
|
|||
Scene(const Scene ©); // Конструктор копирования
|
||||
Scene& operator=(const Scene& other); // Оператор присваивания
|
||||
|
||||
void render(); // Рендер сцены
|
||||
void render(const GLuint &model_uniform); // Рендер сцены
|
||||
|
||||
Node root; // Корневой узел
|
||||
|
||||
|
|
|
@ -2,8 +2,10 @@
|
|||
|
||||
layout(location = 0) in vec3 pos;
|
||||
|
||||
uniform mat4 vp;
|
||||
uniform mat4 model;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position.xyz = pos;
|
||||
gl_Position.w = 1.0;
|
||||
gl_Position = vp * model * vec4(pos, 1.0);
|
||||
}
|
||||
|
|
|
@ -238,8 +238,11 @@ Model::~Model()
|
|||
}
|
||||
|
||||
// Вызов отрисовки
|
||||
void Model::render()
|
||||
void Model::render(const GLuint &model_uniform)
|
||||
{
|
||||
// Загрузим матрицу трансформации
|
||||
glUniformMatrix4fv(model_uniform, 1, GL_FALSE, &getTransformMatrix()[0][0]);
|
||||
|
||||
// Подключаем VAO
|
||||
vao.use();
|
||||
// Если есть индексы - рисуем с их использованием
|
||||
|
|
|
@ -27,10 +27,10 @@ Scene& Scene::operator=(const Scene& other)
|
|||
}
|
||||
|
||||
// Рендер сцены
|
||||
void Scene::render()
|
||||
void Scene::render(const GLuint &model_uniform)
|
||||
{
|
||||
for (auto & model : models)
|
||||
model.render();
|
||||
model.render(model_uniform);
|
||||
}
|
||||
|
||||
// Перестройка узлов выбранного списка
|
||||
|
|
35
src/main.cpp
35
src/main.cpp
|
@ -5,6 +5,7 @@
|
|||
|
||||
#include <iostream>
|
||||
|
||||
#include "Camera.h"
|
||||
#include "Model.h"
|
||||
|
||||
#define WINDOW_WIDTH 800
|
||||
|
@ -112,6 +113,26 @@ GLuint LoadShaders(const char *vertex_file, const char *fragment_file)
|
|||
return programID;
|
||||
}
|
||||
|
||||
|
||||
bool firstMouse = true;
|
||||
float lastX, lastY;
|
||||
|
||||
void mouse_callback(GLFWwindow* window, double xpos, double ypos)
|
||||
{
|
||||
if (firstMouse)
|
||||
{
|
||||
lastX = xpos;
|
||||
lastY = ypos;
|
||||
firstMouse = false;
|
||||
}
|
||||
|
||||
glm::vec2 offset(xpos - lastX, lastY - ypos);
|
||||
lastX = xpos;
|
||||
lastY = ypos;
|
||||
|
||||
Camera::current().rotate(offset);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
GLFWwindow* window; // Указатель на окно GLFW3
|
||||
|
@ -145,6 +166,9 @@ int main(void)
|
|||
|
||||
glfwSwapInterval(1); // Вертикальная синхронизация
|
||||
|
||||
// Установка callback-функции для мыши и камеры
|
||||
glfwSetCursorPosCallback(window, mouse_callback);
|
||||
|
||||
// Загрузка функций OpenGL с помощью GLAD
|
||||
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
|
||||
{
|
||||
|
@ -175,18 +199,27 @@ int main(void)
|
|||
// Загрузка индексов модели
|
||||
rectangle.load_indices(indices, sizeof(indices));
|
||||
|
||||
rectangle.e_position().z = 2;
|
||||
rectangle.e_rotation() = {0.733f, 0.462f, 0.191f, 0.462f};
|
||||
|
||||
// Установка цвета очистки буфера цвета
|
||||
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
|
||||
|
||||
// Расположение Uniform-переменной
|
||||
GLuint vp_uniform = glGetUniformLocation(shaderProgram, "vp");
|
||||
GLuint model_uniform = glGetUniformLocation(shaderProgram, "model");
|
||||
|
||||
// Пока не произойдет событие запроса закрытия окна
|
||||
while(!glfwWindowShouldClose(window))
|
||||
{
|
||||
// Загрузим матрицу проекции*вида
|
||||
glUniformMatrix4fv(vp_uniform, 1, GL_FALSE, &Camera::current().getVP()[0][0]);
|
||||
|
||||
// Очистка буфера цвета
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
// Тут производится рендер
|
||||
rectangle.render();
|
||||
rectangle.render(model_uniform);
|
||||
|
||||
// Представление содержимого буфера цепочки показа на окно
|
||||
glfwSwapBuffers(window);
|
||||
|
|
Loading…
Reference in New Issue