int main(int argc, char** argv) { for (int i = 0; i < M.GetLayers(); i++) { M.Show(i); printf("\n"); } current_elevator_i = M.getElevatorI(); current_elevator_j = M.getElevatorJ(); fvc = read_obj("flashlight.obj", fv, ftv, fn); initGLUT(&argc, argv); initGLEW(); initOpenGL(); glutKeyboardFunc(Movement); glutWarpPointer(200, 200); glutMotionFunc(MouseActiveMotion); glutPassiveMotionFunc(MouseMotion); glutMouseFunc(MouseButtons); glutMainLoop(); freeVAO(); freeVBO(); cleanShaders(); return 0; }
void Movement(unsigned char key, int x, int y) { //Obrót zrealizowany jest jako rotacja wektora od oczu obserwatora do punktu na który patrzy wokó³ wektora wskazuj¹cego 'w górê' od obserwatora, //a nastêpnie wyliczenie nowego punktu skupienia wzroku obserwatora jako przesuniêcie punktu oczu o zrotowany wczeœniej wektor. //Przesuniêcie to translacja punktu po³o¿enia obserwatora i punktu skupienia jego wzroku o znormalizowany wektor od oczu do obserwowanego punktu //(w taki sposób modu³ tego wektora nie ulega zmianie). glm::vec4 vrot; glm::vec3 move; int i = 1, j = 1; if (key == 'a' || key == 'd' ) { vrot = glm::rotate(glm::mat4(1.0f), key == 'a' ? 3.0f : -3.0f, m_up)*glm::vec4(m_center - m_eye, 0); m_center = m_eye + glm::vec3(vrot); } else if ((key == 'w' || key == 's') && direction == 0) { move = glm::normalize(m_center - m_eye); move *= 0.2; if (key == 's')move *= -1; if (fly || !CollisionX(move, i)) { m_eye.x += move.x; m_center.x += move.x; p_i = i; } if (fly || !CollisionZ(move, j)) { m_eye.z += move.z; m_center.z += move.z; p_j = j; } if (fly) { m_eye.y += move.y; m_center.y += move.y; } } else if (key == 'c') { if (M[p_i][p_j] == 'u')Up(); else if (M[p_i][p_j] == 'd')Down(); } else if (key == 'm') { M.Show(cur_layer); printf("%d %d\n", p_i, p_j); } else if (key == 'f')fly = !fly; }