ToyEngine/Exp2/ModelWorld.cpp

87 lines
2.6 KiB
C++

#include "ModelWorld.h"
#include <RenderingSystem.h>
ModelWorld::ModelWorld()
{
light.lightDirection = glm::normalize(glm::vec3((cos(lightPitch) * cos(lightYaw)), (sin(lightPitch)), (cos(lightPitch) * sin(lightYaw))));
light.radiance = 3.f * lightColor;
RenderingSystem::instance().exposure = 0.45f;
model = std::make_shared<Actor>("Models/David_Brown_25D_tractor_SF/David_Brown_25D_tractor_SF.obj");
model->setPosition({ 0,0,0 });
model->setScale(glm::vec3(0.5));
addActor(model);
camera.Position = { 0,5,10 };
}
void ModelWorld::logicalTick(float deltaTime)
{
World::logicalTick(deltaTime);
}
void ModelWorld::rendererTick(float deltaTime)
{
World::rendererTick(deltaTime);
}
void ModelWorld::cursorPosCallback(GLFWwindow* window, double xpos, double ypos)
{
static bool firstMouse = true;
static float lastX;
static float lastY;
float xoffset = xpos - lastX;
float yoffset = lastY - ypos;
lastX = xpos;
lastY = ypos;
if (firstMouse)
{
firstMouse = false;
return;
}
if (glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_RIGHT) == GLFW_PRESS)
camera.processMouseMovement(xoffset, yoffset);
if (glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_LEFT) == GLFW_PRESS)
{
float speed = 0.2f;
model->setRotaion(glm::rotate(glm::quat(1, 0, 0, 0),
glm::radians(glm::length(glm::vec2(xoffset, yoffset)) * speed), glm::vec3(glm::vec2(-yoffset, xoffset), 0.0)) * model->getRotation());
}
}
void ModelWorld::scrollCallback(GLFWwindow* window, double xoffset, double yoffset)
{
camera.processMouseScroll(yoffset);
}
void ModelWorld::processInput(GLFWwindow* window, float deltaTime)
{
if (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS)
camera.processKeyboard(FORWARD, deltaTime);
if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS)
camera.processKeyboard(BACKWARD, deltaTime);
if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS)
camera.processKeyboard(LEFT, deltaTime);
if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS)
camera.processKeyboard(RIGHT, deltaTime);
if (glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS)
camera.processKeyboard(UP, deltaTime);
if (glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS)
camera.processKeyboard(DOWN, deltaTime);
float speed = 0.1;
if (glfwGetKey(window, GLFW_KEY_UP) == GLFW_PRESS)
model->setPosition(model->getPosition() + glm::vec3(0, 0, -speed));
if (glfwGetKey(window, GLFW_KEY_DOWN) == GLFW_PRESS)
model->setPosition(model->getPosition() + glm::vec3(0, 0, speed));
if (glfwGetKey(window, GLFW_KEY_LEFT) == GLFW_PRESS)
model->setPosition(model->getPosition() + glm::vec3(-speed, 0, 0));
if (glfwGetKey(window, GLFW_KEY_RIGHT) == GLFW_PRESS)
model->setPosition(model->getPosition() + glm::vec3(speed, 0, 0));
}