Инструмент поворота

This commit is contained in:
parent 332b30fdcb
commit 8e60904f65
3 changed files with 50 additions and 2 deletions

View File

@ -2,6 +2,7 @@
#define TRS_H #define TRS_H
#define T_SENSITIVITY 0.001 #define T_SENSITIVITY 0.001
#define R_SENSITIVITY 1
#include "Model.h" #include "Model.h"
@ -24,4 +25,12 @@ class Transform : public TRS
virtual void process(GLuint64 selectedID, GLuint etc, const glm::vec4& dpos); // Взаимодействие с инструментом virtual void process(GLuint64 selectedID, GLuint etc, const glm::vec4& dpos); // Взаимодействие с инструментом
}; };
// Инструмент поворота
class Rotate : public TRS
{
public:
Rotate();
virtual void process(GLuint64 selectedID, GLuint etc, const glm::vec4& dpos); // Взаимодействие с инструментом
};
#endif // TRS_H #endif // TRS_H

View File

@ -403,6 +403,8 @@ int main(void)
// Инструменты // Инструменты
Transform transform; Transform transform;
Rotate rotate;
TRS& currentTool = rotate;
// Пока не произойдет событие запроса закрытия окна // Пока не произойдет событие запроса закрытия окна
while(!glfwWindowShouldClose(window)) while(!glfwWindowShouldClose(window))
@ -430,7 +432,7 @@ int main(void)
// Используем шейдер для инструментов // Используем шейдер для инструментов
toolsShader.use(); toolsShader.use();
// Рендерим инструменты для выбранного объекта // Рендерим инструменты для выбранного объекта
transform.render(selected.value, toolsShader, material_data); currentTool.render(selected.value, toolsShader, material_data);
// Выбор объекта // Выбор объекта
if (mouse.left == 0100000) if (mouse.left == 0100000)
@ -567,7 +569,7 @@ int main(void)
// Взаимодействие с инструментом при зажатой левой кнопке // Взаимодействие с инструментом при зажатой левой кнопке
if (mouse.left > 0100000) if (mouse.left > 0100000)
if (selected.etc) if (selected.etc)
transform.process(selected.value, selected.etc, glm::transpose(camera.getVP()) * glm::vec4(mouse.x - mouse.prev_x, mouse.prev_y - mouse.y, 0, 1)); currentTool.process(selected.value, selected.etc, glm::transpose(camera.getVP()) * glm::vec4(mouse.x - mouse.prev_x, mouse.prev_y - mouse.y, 0, 1));
} }
// Отключение атрибутов // Отключение атрибутов

View File

@ -61,3 +61,40 @@ void Transform::process(GLuint64 selectedID, GLuint etc, const glm::vec4& dpos)
selectedObject->dPosition(dVec); selectedObject->dPosition(dVec);
} }
} }
Rotate::Rotate()
{
tool = loadOBJtoGroupted("../resources/models/tools/rotate.obj", "../resources/models/tools/", "../resources/textures/");
// Масштабирование
tool.scale = glm::vec3(0.3);
tool.rotation.y = 180;
// Инициализация дополнительной информации
tool.parts[0].id.etc = 1;
tool.parts[1].id.etc = 2;
tool.parts[2].id.etc = 4;
}
// Взаимодействие с инструментом
void Rotate::process(GLuint64 selectedID, GLuint etc, const glm::vec4& dpos)
{
// Если есть выбранная модель - рендерим инструмент для неё
if (selectedID)
{
// Указатель на объект
Movable* selectedObject = (Movable*) selectedID;
glm::vec3 dVec(0);
if (etc & 01)
dVec.x = dpos.x * R_SENSITIVITY;
if (etc & 02)
dVec.z = dpos.z * R_SENSITIVITY;
if (etc & 04)
dVec.y = dpos.y * R_SENSITIVITY;
if (etc > 0)
selectedObject->dRotation(dVec);
}
}