#include <iostream>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
glm::mat4 viewMatrix;
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) {
if (action == GLFW_PRESS || action == GLFW_REPEAT) {
const float speed = 0.1f;
if (key == GLFW_KEY_W) viewMatrix = glm::translate(viewMatrix, glm::vec3(0.0f, 0.0f, -speed));
if (key == GLFW_KEY_S) viewMatrix = glm::translate(viewMatrix, glm::vec3(0.0f, 0.0f, speed));
if (key == GLFW_KEY_A) viewMatrix = glm::translate(viewMatrix, glm::vec3(-speed, 0.0f, 0.0f));
if (key == GLFW_KEY_D) viewMatrix = glm::translate(viewMatrix, glm::vec3(speed, 0.0f, 0.0f));
}
}
int main() {
if (!glfwInit()) {
std::cerr << "Error initializing GLFW" << std::endl;
return -1;
}
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
GLFWwindow* window = glfwCreateWindow(800, 600, "3D Camera", nullptr, nullptr);
if (!window) {
std::cerr << "Error creating GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
glewInit();
glfwSetKeyCallback(window, key_callback);
glEnable(GL_DEPTH_TEST);
// Inicializar la matriz de vista (view matrix)
viewMatrix = glm::lookAt(glm::vec3(0.0f, 0.0f, 3.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));
while (!glfwWindowShouldClose(window)) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Aplicar la matriz de vista
// En este punto, puedes utilizar viewMatrix como la matriz de vista personalizada
// glm::mat4 modelMatrix = glm::mat4(1.0f);
// glm::mat4 mvp = projectionMatrix * viewMatrix * modelMatrix;
// glUniformMatrix4fv(mvpUniformLocation, 1, GL_FALSE, glm::value_ptr(mvp));
// Dibujar tu escena 3D aquí
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}