Advertisement
Monika__

Spring with controls

Dec 1st, 2020
1,014
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.88 KB | None | 0 0
  1. // Template1.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <math.h>
  6. #include <iostream>
  7. #include <Windows.h>
  8. #include "include\GL\GL.H"
  9. #include "include\GL\GLU.H"
  10. #include "include\GL\glut.h"
  11. #include "Template1.h"
  12. #define PI 3.14
  13.  
  14. using namespace std;
  15.  
  16. double rotate_y = 0;
  17. double rotate_x = -80;
  18. double zoom = -32;
  19. double horizontal = 0;
  20. double vertical = -7;
  21.  
  22.  
  23.  
  24. void drawSpringPoints(void) {
  25.     double x, y, z;
  26.     double t, u;
  27.     glBegin(GL_POINTS);
  28.     for (t = 0; t < 8 * PI; t += 0.1) {
  29.         for (u = 0; u < 2 * PI; u += 0.1) {
  30.             x = cos(t) * (3 + cos(u));
  31.             y = sin(t) * (3 + cos(u));
  32.             z = 0.6 * t + sin(u);
  33.             glColor3f(1.0f, 0.0f, 0.0f);
  34.  
  35.             glVertex3d(x, y, z);
  36.            
  37.         }
  38.     }
  39.     glEnd();
  40.  
  41.  
  42. }
  43. void setColor(int index) {
  44.     switch (index){
  45.     case 1:
  46.         glColor3f(1.0f, 0.0f, 0.0f);
  47.         break;
  48.     case 2:
  49.         glColor3f(0.0f, 1.0f, 0.0f);
  50.         break;
  51.     case 3:
  52.         glColor3f(0.0f, 0.0f, 1.0f);
  53.         break;
  54.     case 4:
  55.         glColor3f(1.0f, 1.0f, 0.0f);
  56.         break;
  57.     default:
  58.         glColor3f(1.0f, 0.0f, 1.0f);
  59.  
  60.     }
  61. }
  62. void drawSpring(void) {
  63.     double x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4;
  64.     double t, u;
  65.     int color = 0;
  66.     double max_y = 0;
  67.     double max_x = 0;
  68.     double min_y = 10;
  69.     double min_x = 10;
  70.  
  71.     for (t = 0; t < 8 * PI; t += 0.1) {
  72.         for (u = 0; u < 2 * PI; u += 0.5) {
  73.             x1 = cos(t) * (3 + cos(u));
  74.             y1 = sin(t) * (3 + cos(u));
  75.             z1 = 0.6 * t + sin(u);
  76.  
  77.             x2 = cos(t + 0.1) * (3 + cos(u));
  78.             y2 = sin(t + 0.1) * (3 + cos(u));
  79.             z2 = 0.6 * (t + 0.1) + sin(u);
  80.  
  81.             x3 = cos(t) * (3 + cos(u + 0.5));
  82.             y3 = sin(t) * (3 + cos(u + 0.5));
  83.             z3 = 0.6 * t + sin(u + 0.5);
  84.  
  85.             x4 = cos(t + 0.1) * (3 + cos(u + 0.5));
  86.             y4 = sin(t + 0.1) * (3 + cos(u + 0.5));
  87.             z4 = 0.6 * (t + 0.1) + sin(u + 0.5);
  88.  
  89.             setColor(color % 4 + 1);
  90.  
  91.  
  92.             glBegin(GL_QUADS);
  93.        
  94.             glVertex3d(x1, y1, z1);
  95.             glVertex3d(x3, y3, z3);
  96.             glVertex3d(x4, y4, z4);
  97.             glVertex3d(x2, y2, z2);
  98.  
  99.  
  100.             glEnd();
  101.             color += 1;
  102.  
  103.             if (abs(x1) > max_x) {
  104.                 max_x = x1;
  105.             }
  106.             if (abs(y1) > max_y) {
  107.                 max_y = y1;
  108.             }
  109.             if (abs(x1) < min_x) {
  110.                 min_x = x1;
  111.             }
  112.             if (abs(y1) < min_y) {
  113.                 min_y = y1;
  114.             }
  115.             //cout << "x: " << x1 << " y: " << y1 << " z: " << z1 << endl;
  116.         }
  117.     }
  118.  
  119.  
  120.     cout << "max x: " << max_x << " max y: " << max_y << endl;
  121.     cout << "min x: " << min_x << " min y: " << min_y << endl;
  122.  
  123.     glColor3f(1.0f, 0.0f, 1.0f);
  124.     glBegin(GL_QUADS);
  125.  
  126.     glVertex3d(x1, y1, z1);
  127.     glVertex3d(x3, y3, z3);
  128.     glVertex3d(x4, y4, z4);
  129.     glVertex3d(x2, y2, z2);
  130.  
  131.  
  132.     glEnd();
  133.  
  134.  
  135. }
  136.  
  137. void MyDisplay(void) {
  138.     glLoadIdentity();
  139.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  140.    
  141.     glPushMatrix();
  142.     glTranslated(horizontal, vertical, zoom);
  143.     glRotatef(rotate_x, 1.0, 0.0, 0.0);
  144.     glRotatef(rotate_y, 0.0, 1.0, 0.0);
  145.  
  146.     drawSpring();
  147.  
  148.     /*
  149.     //back
  150.     glBegin(GL_POLYGON);
  151.     glColor3f(1.0f, 0.0f, 0.0f);
  152.     glVertex3d(1, 1, 1);
  153.     glVertex3d(-1, 1, 1);
  154.     glVertex3d(-1, -1, 1);
  155.     glVertex3d(1, -1, 1);
  156.     glEnd();
  157.  
  158.     //front
  159.     glBegin(GL_POLYGON);
  160.     glColor3f(0.0f, 1.0f, 0.0f);
  161.     glVertex3d(1, 1, -1);
  162.     glVertex3d(-1, 1, -1);
  163.     glVertex3d(-1, -1, -1);
  164.     glVertex3d(1, -1, -1);
  165.     glEnd();
  166.  
  167.     //right side
  168.     glBegin(GL_POLYGON);
  169.     glColor3f(0.0f, 0.0f, 1.0f);
  170.     glVertex3d(1, 1, -1);
  171.     glVertex3d(1, 1, 1);
  172.     glVertex3d(1, -1, 1);
  173.     glVertex3d(1, -1, -1);
  174.     glEnd();
  175.  
  176.     //left side
  177.     glBegin(GL_POLYGON);
  178.     glColor3f(1.0f, 1.0f, 0.0f);
  179.     glVertex3d(-1, 1, -1);
  180.     glVertex3d(-1, 1, 1);
  181.     glVertex3d(-1, -1, 1);
  182.     glVertex3d(-1, -1, -1);
  183.     glEnd();
  184.  
  185.     //top
  186.     glBegin(GL_POLYGON);
  187.     glColor3f(1.0f, 0.0f, 1.0f);
  188.     glVertex3d(1, 1, -1);
  189.     glVertex3d(-1, 1, -1);
  190.     glVertex3d(-1, 1, 1);
  191.     glVertex3d(1, 1, 1);
  192.     glEnd();
  193.  
  194.     //bottom
  195.     glBegin(GL_POLYGON);
  196.     glColor3f(0.0f, 1.0f, 1.0f);
  197.     glVertex3d(1, -1, -1);
  198.     glVertex3d(-1, -1, -1);
  199.     glVertex3d(-1, -1, 1);
  200.     glVertex3d(1, -1, 1);
  201.     glEnd();
  202.     */
  203.  
  204.     glPopMatrix();
  205.  
  206.  
  207.     glFlush();
  208.     //necessary for GLU_DOUBLE displayMode
  209.     //glutSwapBuffers();
  210.  
  211. }
  212. void keyboard(int key, int x, int y) {
  213.  
  214.     if (key == GLUT_KEY_RIGHT) {
  215.         rotate_y += 5;
  216.         cout << "rotate_y is: " << rotate_y << endl;
  217.     }
  218.  
  219.     else if (key == GLUT_KEY_LEFT) {
  220.         rotate_y -= 5;
  221.         cout << "rotate_y is: " << rotate_y << endl;
  222.     }
  223.  
  224.     else if (key == GLUT_KEY_UP) {
  225.         rotate_x -= 5;
  226.         cout << "rotate_x is: " << rotate_x << endl;
  227.     }
  228.  
  229.     else if (key == GLUT_KEY_DOWN) {
  230.         rotate_x += 5;
  231.         cout << "rotate_x is: " << rotate_x << endl;
  232.  
  233.     }
  234.    
  235.     // Request display update
  236.     glutPostRedisplay();
  237.    
  238. }
  239.  
  240.  
  241. void MyInit(void) {
  242.     glClearColor(0.0, 0.0, 0.0, 0.0);
  243.     glViewport(0, 500, 500, 500);
  244.     glMatrixMode(GL_PROJECTION);
  245.     glLoadIdentity();
  246.     gluPerspective(60, 1, 1, 40.0);
  247.     glMatrixMode(GL_MODELVIEW);
  248.     glLoadIdentity();
  249.     glDrawBuffer(GL_BACK);
  250.     glEnable(GL_DEPTH_TEST);
  251. }
  252.  
  253. void NormalKeyHandler(unsigned char key, int x, int y) {
  254.         if (key == 'z') {
  255.             zoom -= 0.5;
  256.             cout << "zoom is: " << zoom << endl;
  257.         }
  258.            
  259.         else if (key == 'x') {
  260.             zoom += 0.5;
  261.             cout << "zoom is: " << zoom << endl;
  262.         }
  263.            
  264.         else if (key == 'a') {
  265.             horizontal -= 1;
  266.             cout << "horizontal is: " << horizontal << endl;
  267.         }
  268.            
  269.  
  270.         else if (key == 'd') {
  271.             horizontal += 1;
  272.             cout << "horizontal is: " << horizontal << endl;
  273.         }
  274.  
  275.         else if (key == 's') {
  276.             vertical -= 1;
  277.             cout << "vertical is: " << vertical << endl;
  278.         }
  279.            
  280.         else if (key == 'w') {
  281.             vertical += 1;
  282.             cout << "vertical is: " << vertical << endl;
  283.         }
  284.  
  285.         glutPostRedisplay();
  286. }
  287.  
  288.  
  289. int main(int argc, char** argv) {
  290.     glutInit(&argc, argv);
  291.     glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);//single buffer and RGBA
  292.     glutInitWindowSize(500, 500);//initial window size
  293.     glutInitWindowPosition(100, 100);
  294.     glutCreateWindow("Cube");//create widnow, hello title bar
  295.     MyInit();
  296.     glutDisplayFunc(MyDisplay);
  297.     glutSpecialFunc(keyboard);
  298.     glutKeyboardFunc(NormalKeyHandler);
  299.     glutMainLoop();//enter main loop and process events
  300.     return 0;
  301. }
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement