Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "glfw-3.3.2/include/GLFW/glfw3.h"
- //#include <GLFW/glfw3.h>
- #include <iostream>
- #include <math.h>
- #define LEFT_BOTTOM_NEAR -1.0, -1.0, 1.0
- #define LEFT_BOTTOM_FAR -1.0, -1.0, -1.0
- #define LEFT_TOP_NEAR -1.0, 1.0, 1.0
- #define LEFT_TOP_FAR -1.0, 1.0, -1.0
- #define RIGHT_BOTTOM_NEAR 1.0, -1.0, 1.0
- #define RIGHT_BOTTOM_FAR 1.0, -1.0, -1.0
- #define RIGHT_TOP_NEAR 1.0, 1.0, 1.0
- #define RIGHT_TOP_FAR 1.0, 1.0, -1.0
- using namespace std;
- double rotateX, rotateY, rotateZ;
- double shiftX, shiftY, shiftZ;
- double scale = 0.6;
- void key_callback(GLFWwindow*, int, int, int, int);
- void mouseButton_callback(GLFWwindow*, int, int, int);
- void render(const string type);
- int main()
- {
- if (!glfwInit()) exit(EXIT_FAILURE);
- int width = 1024, height = 850;
- GLFWwindow* window = glfwCreateWindow(width, height, "Lab_2", NULL, NULL);
- if (!window)
- {
- glfwTerminate();
- exit(EXIT_FAILURE);
- }
- glfwMakeContextCurrent(window);
- glfwSetKeyCallback(window , key_callback);
- glfwSetMouseButtonCallback(window, mouseButton_callback);
- while (!glfwWindowShouldClose(window))
- {
- glEnable(GL_DEPTH_TEST);
- glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glfwGetFramebufferSize(window, &width, &height);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glViewport(0, 0, width, height);
- glOrtho(-2 * ((double)width / height), 2 * ((double)width / height),
- -2, 2, -2 * ((double)width / height), 2 * ((double)width / height));
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glRotatef(asin(tan(30 * M_PI/180)) * 180 / M_PI, 3, 0, 0);
- glRotatef(45, 0, 3, 0);
- render("dynamic");
- render("static");
- glfwSwapBuffers(window);
- glfwPollEvents();
- }
- glfwDestroyWindow(window);
- glfwTerminate();
- exit(EXIT_SUCCESS);
- }
- void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
- {
- if (key == GLFW_KEY_R && action == GLFW_PRESS)
- {
- rotateY += 5;
- if (rotateY >= 360) rotateY -= 360;
- }
- if (key == GLFW_KEY_E && action == GLFW_PRESS)
- {
- rotateY -= 5;
- if (rotateY < 0) rotateY += 360;
- }
- if (key == GLFW_KEY_G && action == GLFW_PRESS)
- {
- rotateX += 5;
- if (rotateX >= 360) rotateX -= 360;
- }
- if (key == GLFW_KEY_F && action == GLFW_PRESS)
- {
- rotateX -= 5;
- if (rotateX < 0) rotateX += 360;
- }
- if (key == GLFW_KEY_B && action == GLFW_PRESS)
- {
- rotateZ += 5;
- if (rotateZ >= 360) rotateZ -= 360;
- }
- if (key == GLFW_KEY_V && action == GLFW_PRESS)
- {
- rotateZ -= 5;
- if (rotateZ < 0) rotateZ += 360;
- }
- if (key == GLFW_KEY_1 && action == GLFW_PRESS)
- {
- shiftY -= 0.1;
- }
- if (key == GLFW_KEY_2 && action == GLFW_PRESS)
- {
- shiftY += 0.1;
- }
- if (key == GLFW_KEY_3 && action == GLFW_PRESS)
- {
- shiftX -= 0.1;
- }
- if (key == GLFW_KEY_4 && action == GLFW_PRESS)
- {
- shiftX += 0.1;
- }
- if (key == GLFW_KEY_5 && action == GLFW_PRESS)
- {
- shiftZ -= 0.1;
- }
- if (key == GLFW_KEY_6 && action == GLFW_PRESS)
- {
- shiftZ += 0.1;
- }
- if (key == GLFW_KEY_Z && action == GLFW_PRESS)
- {
- scale += 0.05;
- }
- if (key == GLFW_KEY_X && action == GLFW_PRESS)
- {
- scale -= 0.05;
- }
- }
- void mouseButton_callback(GLFWwindow* window, int button, int action, int mods) {
- if (button == GLFW_MOUSE_BUTTON_LEFT && action == GLFW_PRESS) {
- glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
- }
- if (button == GLFW_MOUSE_BUTTON_RIGHT && action == GLFW_PRESS) {
- glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
- }
- }
- void render(const string type)
- {
- glPushMatrix();
- if (type == "dynamic")
- {
- glRotated(rotateX, 2, 0, 0);
- glRotated(rotateY, 0, 2, 0);
- glRotated(rotateZ, 0, 0, 2);
- glScaled(scale, scale, scale);
- glTranslated(shiftX, shiftY, shiftZ);
- }
- else
- {
- glTranslated(-2, 0, 0);
- glScaled(0.2, 0.2, 0.2);
- }
- glBegin(GL_QUADS);
- glColor3f(1.0, 0.0, 0.0);
- glVertex3f(LEFT_BOTTOM_FAR);
- glVertex3f(LEFT_BOTTOM_NEAR);
- glVertex3f(RIGHT_BOTTOM_NEAR);
- glVertex3f(RIGHT_BOTTOM_FAR);
- glEnd();
- glBegin(GL_QUADS);
- glColor3f(1.0, 0.0, 0.0);
- glVertex3f(LEFT_TOP_FAR);
- glVertex3f(LEFT_TOP_NEAR);
- glVertex3f(RIGHT_TOP_NEAR);
- glVertex3f(RIGHT_TOP_FAR);
- glEnd();
- glBegin(GL_QUADS);
- glColor3f(0.0, 0.0, 1.0);
- glVertex3f(RIGHT_BOTTOM_NEAR);
- glVertex3f(LEFT_BOTTOM_NEAR);
- glVertex3f(LEFT_TOP_NEAR);
- glVertex3f(RIGHT_TOP_NEAR);
- glEnd();
- glBegin(GL_QUADS);
- glColor3f(0.0, 0.0, 1.0);
- glVertex3f(RIGHT_BOTTOM_FAR);
- glVertex3f(LEFT_BOTTOM_FAR);
- glVertex3f(LEFT_TOP_FAR);
- glVertex3f(RIGHT_TOP_FAR);
- glEnd();
- glBegin(GL_QUADS);
- glColor3f(0.0, 1.0, 0.0);
- glVertex3f(RIGHT_BOTTOM_FAR);
- glVertex3f(RIGHT_BOTTOM_NEAR);
- glVertex3f(RIGHT_TOP_NEAR);
- glVertex3f(RIGHT_TOP_FAR);
- glEnd();
- glBegin(GL_QUADS);
- glColor3f(0.0, 1.0, 0.0);
- glVertex3f(LEFT_BOTTOM_FAR);
- glVertex3f(LEFT_BOTTOM_NEAR);
- glVertex3f(LEFT_TOP_NEAR);
- glVertex3f(LEFT_TOP_FAR);
- glEnd();
- glPopMatrix();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement