for (int i = 0; i < 100; i++) {
GLuint projId = glGetUniformLocation(progId, "projection");
- glm::mat4 proj = glm::perspective(glm::radians(45.f), 1.33f, 0.01f, 100.f);
+ glm::mat4 proj = glm::perspective(glm::radians(45.f), 1.33f, 0.01f, 10000.f);
glUniformMatrix4fv(projId, 1, GL_FALSE, glm::value_ptr(proj));
GLuint viewId = glGetUniformLocation(progId, "view");
float d = (float)glutGet(GLUT_ELAPSED_TIME) * 0.001f;
glm::mat4 model = glm::mat4(1.f);
- model = glm::translate(model, glm::vec3(sin(i * 30) * 2, cos(i * 30) * 2, i * 2));
+ model = glm::translate(model, glm::vec3(sin(i * 30) * 10, cos(i * 30) * 10, i * 2));
if (doRotate) {
model = glm::rotate(model, d * glm::radians(30.f), glm::vec3(0.f, 1.f, 0.f));
}
if (doScale)
- model = glm::scale(model, glm::vec3(1.f, 0.3f + 0.7f * (1 + sin(d * (i + 3))), 1.f));
+ model = glm::scale(model, glm::vec3(1.f, 0.7f + 0.7f * (1 + sin(d + (i + 3))), 1.f));
if (doTranslate)
- model = glm::translate(model, glm::vec3(sin(d), cos(d), sin(d)));
+ model = glm::translate(model, glm::vec3(sin(d + (i + 1)), cos(d + (i + -3)), sin(d + (i + 4))));
glUniformMatrix4fv(modelId, 1, GL_FALSE, glm::value_ptr(model));
glEnable(GL_DEPTH_TEST);
}
+bool* keyStates = new bool[256];
+
void keyboard(unsigned char key, int x, int y) {
- if (key == 'w')
- camPos.z += 0.1f;
- if (key == 's')
- camPos.z -= 0.1f;
- if (key == 'a')
- camPos.x += 0.1f;
- if (key == 'd')
- camPos.x -= 0.1f;
- if (key == 'q')
- camPos.y += 0.1f;
- if (key == 'e')
- camPos.y -= 0.1f;
+ keyStates[key] = true;
if (key == 'z')
doScale = !doScale;
if (key == 'x')
doRotate = !doRotate;
if (key == 'c')
doTranslate = !doTranslate;
- glutPostRedisplay();
+}
+
+void keyboardUp(unsigned char key, int x, int y) {
+ keyStates[key] = false;
}
void idle(int _) {
+ float xSpeed = 0.f, ySpeed = 0.f, zSpeed = 0.f;
+ if (keyStates['w'])
+ zSpeed = 0.1f;
+ if (keyStates['s'])
+ zSpeed = -0.1f;
+ if (keyStates['a'])
+ xSpeed = 0.1f;
+ if (keyStates['d'])
+ xSpeed = -0.1f;
+ if (keyStates['q'])
+ ySpeed = 0.1f;
+ if (keyStates['e'])
+ ySpeed = -0.1f;
+
+ camPos.x += xSpeed * sin(yaw) + zSpeed * cos(yaw);
+ camPos.y += ySpeed;
+ camPos.z += zSpeed * sin(yaw) - xSpeed * cos(yaw);
glutPostRedisplay();
glutTimerFunc(16, idle, 0);
}
init();
glutKeyboardFunc(keyboard);
+ glutKeyboardUpFunc(keyboardUp);
glutTimerFunc(16, idle, 0);
glutMotionFunc(motion);
glutMouseFunc(mouse);