mouse controll
This commit is contained in:
parent
6e48ee3fc2
commit
0267879884
@ -28,12 +28,20 @@ glm::vec3 cameraDir = glm::vec3(1.f, 0.f, 0.f);
|
||||
|
||||
glm::vec3 spaceshipPos = glm::vec3(-4.f, 0, 0);
|
||||
glm::vec3 spaceshipDir = glm::vec3(1.f, 0.f, 0.f);
|
||||
glm::vec3 spaceshipUp = glm::vec3(0.f, 1.f, 0.f);
|
||||
GLuint VAO,VBO;
|
||||
|
||||
float aspectRatio = 1.f;
|
||||
|
||||
float lastFrameTime = -1.f;
|
||||
float deltaTime = 0.f;
|
||||
|
||||
glm::vec3 lightColor = glm::vec3(0.9, 0.7, 0.8);
|
||||
|
||||
bool moveCamWithMouse = false;
|
||||
glm::vec2 posMousePressed;
|
||||
glm::vec2 posMouseReleased;
|
||||
|
||||
glm::mat4 createCameraMatrix()
|
||||
{
|
||||
glm::vec3 cameraSide = glm::normalize(glm::cross(cameraDir,glm::vec3(0.f,1.f,0.f)));
|
||||
@ -100,6 +108,9 @@ void renderScene(GLFWwindow* window)
|
||||
glm::mat4 transformation;
|
||||
float time = glfwGetTime();
|
||||
|
||||
deltaTime = time - lastFrameTime;
|
||||
deltaTime = glm::min(deltaTime, 0.1f);
|
||||
lastFrameTime = time;
|
||||
|
||||
glUseProgram(program);
|
||||
//planet
|
||||
@ -155,9 +166,50 @@ void loadModelToContext(std::string path, Core::RenderContext& context)
|
||||
context.initFromAssimpMesh(scene->mMeshes[0]);
|
||||
}
|
||||
|
||||
void cursor_position_callback(GLFWwindow* window, double xpos, double ypos)
|
||||
{
|
||||
if (moveCamWithMouse) {
|
||||
glm::vec3 spaceshipSide = glm::normalize(glm::cross(spaceshipDir, spaceshipUp));
|
||||
|
||||
//int winWidth, winHeight;
|
||||
//glfwGetWindowSize(window, &winWidth, &winHeight);
|
||||
//glm::vec2 currMouseWorldPos = glm::vec2(2 * xpos / winWidth - 1, -(2 * ypos / winHeight - 1));
|
||||
//glm::vec2 lastMouseWorldPos = glm::vec2(2 * posMousePressed.x / winWidth - 1, -(2 * posMousePressed.y / winHeight - 1));
|
||||
|
||||
//glm::vec3 lastPosOnClickPlane = spaceshipPos + 1.5f * spaceshipDir
|
||||
// + lastMouseWorldPos.x * spaceshipSide
|
||||
// + lastMouseWorldPos.y * spaceshipUp;
|
||||
//glm::vec3 currPosOnClickPlane = spaceshipPos + 1.5f * spaceshipDir
|
||||
// + currMouseWorldPos.x * spaceshipSide
|
||||
// + currMouseWorldPos.y * spaceshipUp;
|
||||
//spaceshipDir = glm::normalize(spaceshipDir - (currPosOnClickPlane - lastPosOnClickPlane) / 10.f);
|
||||
|
||||
glm::vec3 diff = spaceshipSide * (xpos - posMousePressed.x) - spaceshipUp * (ypos - posMousePressed.y);
|
||||
spaceshipDir = glm::normalize(spaceshipDir - diff / 1000.f);
|
||||
|
||||
posMousePressed = glm::vec2(xpos, ypos);
|
||||
}
|
||||
}
|
||||
|
||||
void mouse_button_callback(GLFWwindow* window, int button, int action, int mods)
|
||||
{
|
||||
double xpos, ypos;
|
||||
glfwGetCursorPos(window, &xpos, &ypos);
|
||||
posMousePressed = glm::vec2(xpos, ypos);
|
||||
|
||||
if (button == GLFW_MOUSE_BUTTON_1 && action == GLFW_PRESS) {
|
||||
moveCamWithMouse = true;
|
||||
}
|
||||
if (button == GLFW_MOUSE_BUTTON_1 && action == GLFW_RELEASE) {
|
||||
moveCamWithMouse = false;
|
||||
}
|
||||
}
|
||||
|
||||
void init(GLFWwindow* window)
|
||||
{
|
||||
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
|
||||
glfwSetCursorPosCallback(window, cursor_position_callback);
|
||||
glfwSetMouseButtonCallback(window, mouse_button_callback);
|
||||
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
program = shaderLoader.CreateProgram("shaders/shader_4_1.vert", "shaders/shader_4_1.frag");
|
||||
@ -175,8 +227,8 @@ void shutdown(GLFWwindow* window)
|
||||
void processInput(GLFWwindow* window)
|
||||
{
|
||||
glm::vec3 spaceshipSide = glm::normalize(glm::cross(spaceshipDir, glm::vec3(0.f, 1.f, 0.f)));
|
||||
float angleSpeed = 0.005f;
|
||||
float moveSpeed = 0.005f;
|
||||
float angleSpeed = 3.f * deltaTime;
|
||||
float moveSpeed = 3.f * deltaTime;
|
||||
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) {
|
||||
glfwSetWindowShouldClose(window, true);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user