, ctx(window.CreateContext())
, init_glew()
, program()
+, move_velocity(0.001f)
+, pitch_sensitivity(-0.0025f)
+, yaw_sensitivity(-0.001f)
, cam()
, model()
, vtx_buf(0)
, mvp_handle(0)
-, running(false) {
+, running(false)
+, front(false)
+, back(false)
+, left(false)
+, right(false)
+, up(false)
+, down(false) {
GLContext::EnableVSync();
program.LoadShader(
GL_VERTEX_SHADER,
glBufferData(GL_ARRAY_BUFFER, sizeof(vtx_coords), vtx_coords, GL_STATIC_DRAW);
model.Position(glm::vec3(0, 0, -4));
+ cam.Position(glm::vec3(0, 0, 4));
mvp_handle = program.UniformLocation("MVP");
void Application::Run() {
running = true;
Uint32 last = SDL_GetTicks();
+ window.GrabMouse();
while (running) {
Uint32 now = SDL_GetTicks();
int delta = now - last;
void Application::Loop(int dt) {
HandleEvents();
+ Update(dt);
Render();
}
SDL_Event event;
while (SDL_PollEvent(&event)) {
switch (event.type) {
+ case SDL_KEYDOWN:
+ case SDL_KEYUP:
+ switch (event.key.keysym.sym) {
+ case SDLK_w:
+ front = event.key.state == SDL_PRESSED;
+ break;
+ case SDLK_s:
+ back = event.key.state == SDL_PRESSED;
+ break;
+ case SDLK_a:
+ left = event.key.state == SDL_PRESSED;
+ break;
+ case SDLK_d:
+ right = event.key.state == SDL_PRESSED;
+ break;
+ case SDLK_q:
+ up = event.key.state == SDL_PRESSED;
+ break;
+ case SDLK_e:
+ down = event.key.state == SDL_PRESSED;
+ break;
+ }
+ break;
+ case SDL_MOUSEMOTION:
+ cam.RotateYaw(event.motion.xrel * yaw_sensitivity);
+ cam.RotatePitch(event.motion.yrel * pitch_sensitivity);
+ break;
case SDL_QUIT:
running = false;
break;
}
}
+void Application::Update(int dt) {
+ glm::vec3 vel;
+ if (right && !left) {
+ vel.x = move_velocity;
+ } else if (left && !right) {
+ vel.x = -move_velocity;
+ }
+ if (up && !down) {
+ vel.y = move_velocity;
+ } else if (down && !up) {
+ vel.y = -move_velocity;
+ }
+ if (back && !front) {
+ vel.z = move_velocity;
+ } else if (front && !back) {
+ vel.z = -move_velocity;
+ }
+ cam.Velocity(vel);
+
+ cam.Update(dt);
+ model.Update(dt);
+}
+
void Application::Render() {
glClear(GL_COLOR_BUFFER_BIT);