Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 15.04 KB | None | 0 0
  1. // ProjetoPG.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include <iostream>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <gl/glut.h>
  8. #include <string>
  9. #include "Point.h"
  10. #include "Face.h"
  11. #include "Vector.h"
  12. #include <vector>
  13. #include <fstream>
  14. #include <algorithm>
  15. #include "Object.h"
  16. #include "Loader.h"
  17. #include "Camera.h"
  18. #include "Transform.h"
  19.  
  20. #define _CRT_SECURE_NO_WARNINGS
  21.  
  22. #define DRAW_NORMAL
  23.  
  24. #define DEBUG
  25.  
  26. #define EPS 1e-9
  27.  
  28.  
  29. std::vector<Object> objects;
  30.  
  31. Camera camera;
  32.  
  33. vector<vector<Point>> MEM_VEC_POINTS;
  34. vector<vector<Vector>> MEM_VEC_VECTOR;
  35. vector<vector<Face>> MEM_VEC_FACES;
  36.  
  37. bool colorPicker = false;
  38.  
  39. bool picking = false;
  40.  
  41. bool drag;
  42. Point* mousePosition;
  43. Point* mouseInitialPosition;
  44.  
  45. GLfloat light_position[2][4] = { { 0, 0, 0, 0.0 }, { -1.0, -1.0, -1.0, 0.0 } };
  46. int light = 0;
  47. bool enable = false;
  48.  
  49. float near = 0.1;
  50.  
  51. int selectedObject = 0;
  52.  
  53. void drawCoordinateSystem(){
  54.  
  55.     glDisable(GL_LIGHTING);
  56.  
  57.     glPushMatrix();
  58.  
  59.     glLineWidth(1.0);
  60.     glColor3d(0.2, 0.64, 0.76);
  61.  
  62.     glBegin(GL_LINES);
  63.  
  64.     glVertex3d(-10000, 0, 0);
  65.     glVertex3d(10000, 0, 0);
  66.  
  67.     glVertex3d(0, -10000, 0);
  68.     glVertex3d(0, 10000, 0);
  69.  
  70.     glVertex3d(0, 0, -10000);
  71.     glVertex3d(0, 0, 10000);
  72.  
  73.     glEnd();
  74.  
  75.     glPopMatrix();
  76.  
  77.     glEnable(GL_LIGHTING);
  78. }
  79.  
  80. void drawColorPicker(){
  81.  
  82.     glDisable(GL_LIGHTING);
  83.  
  84.     glMatrixMode(GL_PROJECTION);
  85.     glPushMatrix();
  86.     glLoadIdentity();
  87.  
  88.     gluOrtho2D(0.0, 1600, 0.0, 800);
  89.     glMatrixMode(GL_MODELVIEW);
  90.     glPushMatrix();
  91.     glLoadIdentity();
  92.  
  93.     glBegin(GL_TRIANGLES);
  94.     glColor3f(1, 1, 1);
  95.     glVertex3f(glutGet(GLUT_WINDOW_WIDTH) - 105, 105, 0); // top left
  96.     glVertex3f(glutGet(GLUT_WINDOW_WIDTH) - 105, 0, 0); // bot left
  97.     glVertex3f(glutGet(GLUT_WINDOW_WIDTH), 105, 0); // top right
  98.  
  99.     glVertex3f(glutGet(GLUT_WINDOW_WIDTH), 105, 0); // top right
  100.     glVertex3f(glutGet(GLUT_WINDOW_WIDTH), 0, 0); // bot right
  101.     glVertex3f(glutGet(GLUT_WINDOW_WIDTH) - 105, 0, 0); // bot left
  102.  
  103.     glColor3f(1, 0, 0);
  104.     glVertex3f(glutGet(GLUT_WINDOW_WIDTH) - 100, 100, 0); // top left
  105.     glColor3f(0, 1, 0);
  106.     glVertex3f(glutGet(GLUT_WINDOW_WIDTH) - 100, 0, 0); // bot left
  107.     glColor3f(0, 0, 1);
  108.     glVertex3f(glutGet(GLUT_WINDOW_WIDTH), 100, 0); // top right
  109.  
  110.     glVertex3f(glutGet(GLUT_WINDOW_WIDTH), 100, 0); // top right
  111.  
  112.     glColor3f(1, 1, 1);
  113.     glVertex3f(glutGet(GLUT_WINDOW_WIDTH), 0, 0); // bot right
  114.  
  115.     glColor3f(0, 1, 0);
  116.     glVertex3f(glutGet(GLUT_WINDOW_WIDTH) - 100, 0, 0); // bot left
  117.  
  118.     glEnd();
  119.  
  120.     glMatrixMode(GL_MODELVIEW);
  121.     glPopMatrix();
  122.     glMatrixMode(GL_PROJECTION);
  123.     glPopMatrix();
  124.  
  125.     glEnable(GL_LIGHTING);
  126. }
  127.  
  128. void display(){
  129.  
  130.     glViewport(0, 0, glutGet(GLUT_WINDOW_WIDTH) / 2, glutGet(GLUT_WINDOW_HEIGHT));
  131.  
  132.     glClearColor(0.0, 0.0, 0.0, 1.0);
  133.  
  134.     glClear(GL_COLOR_BUFFER_BIT);
  135.  
  136.     glColor3d(0.0, 0.0, 0.0);
  137.  
  138.     glPointSize(1.0);
  139.  
  140.     glMatrixMode(GL_MODELVIEW);
  141.  
  142.     double m[16] = {
  143.         camera.getMatrix()[0], camera.getMatrix()[1], camera.getMatrix()[2], camera.getMatrix()[3],
  144.         camera.getMatrix()[4], camera.getMatrix()[5], camera.getMatrix()[6], camera.getMatrix()[7],
  145.         camera.getMatrix()[8], camera.getMatrix()[9], camera.getMatrix()[10], camera.getMatrix()[11],
  146.         camera.getMatrix()[12], camera.getMatrix()[13], camera.getMatrix()[14], camera.getMatrix()[15],
  147.     };
  148.  
  149.     glLoadMatrixd(m);
  150.  
  151.     for (int i = 0; i < objects.size(); i++){
  152.         glPushMatrix();
  153.  
  154.         double translationMatrix[16];
  155.         Transform::translate(objects[i].translationX, objects[i].translationY, objects[i].translationZ, translationMatrix);
  156.         glMultMatrixd(translationMatrix);
  157.  
  158.         double rotationXMatrix[16];
  159.         Transform::rotateX(objects[i].rotationX, rotationXMatrix);
  160.         glMultMatrixd(rotationXMatrix);
  161.  
  162.         double rotationYMatrix[16];
  163.         Transform::rotateY(objects[i].rotationY, rotationYMatrix);
  164.         glMultMatrixd(rotationYMatrix);
  165.  
  166.         double rotationZMatrix[16];
  167.         Transform::rotateZ(objects[i].rotationZ, rotationZMatrix);
  168.         glMultMatrixd(rotationZMatrix);
  169.  
  170.         double scaleMatrix[16];
  171.         Transform::scale(objects[i].scale, scaleMatrix);
  172.         glMultMatrixd(scaleMatrix);
  173.  
  174.         int index;
  175.         glBegin(GL_TRIANGLES);
  176.         for (int j = 0; j < objects[i].faces.size(); j++){
  177.             #ifdef DRAW_NORMAL
  178.                 index = objects[i].faces[j]->v1->index;
  179.                 glNormal3d(objects[i].normals[index]->x, objects[i].normals[index]->y, objects[i].normals[index]->z);
  180.                 glVertex3d(objects[i].faces[j]->v1->x, objects[i].faces[j]->v1->y, objects[i].faces[j]->v1->z);
  181.             #endif
  182.  
  183.             index = objects[i].faces[j]->v2->index;
  184.             glNormal3d(objects[i].normals[index]->x, objects[i].normals[index]->y, objects[i].normals[index]->z);
  185.             glVertex3d(objects[i].faces[j]->v2->x, objects[i].faces[j]->v2->y, objects[i].faces[j]->v2->z);
  186.  
  187.             index = objects[i].faces[j]->v3->index;
  188.             glNormal3d(objects[i].normals[index]->x, objects[i].normals[index]->y, objects[i].normals[index]->z);
  189.             glVertex3d(objects[i].faces[j]->v3->x, objects[i].faces[j]->v3->y, objects[i].faces[j]->v3->z);
  190.         }
  191.         glEnd();
  192.  
  193.         glPopMatrix();
  194.  
  195.     }
  196.  
  197.  
  198.  
  199.     /* Coordinate system drawing */
  200.  
  201.     drawCoordinateSystem();
  202.  
  203.     if (colorPicker)
  204.         drawColorPicker();
  205.  
  206.     /* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ */
  207.  
  208.     glViewport(glutGet(GLUT_WINDOW_WIDTH) / 2, 0, glutGet(GLUT_WINDOW_WIDTH) / 2, glutGet(GLUT_WINDOW_HEIGHT));
  209.  
  210.     glColor3d(0.0, 0.0, 0.0);
  211.  
  212.     glPointSize(1.0);
  213.  
  214.     glMatrixMode(GL_MODELVIEW);
  215.  
  216.     glLoadMatrixd(m);
  217.  
  218.     glBegin(GL_POLYGON);
  219.     glColor3f(1.0, 1.0, 1.0);
  220.     glVertex3f(0.5, -0.5, 0.5);
  221.     glVertex3f(0.5, 0.5, 0.5);
  222.     glVertex3f(-0.5, 0.5, 0.5);
  223.     glVertex3f(-0.5, -0.5, 0.5);
  224.     glEnd();
  225.  
  226.     // Purple side - RIGHT
  227.     glBegin(GL_POLYGON);
  228.     glColor3f(1.0, 0.0, 1.0);
  229.     glVertex3f(0.5, -0.5, -0.5);
  230.     glVertex3f(0.5, 0.5, -0.5);
  231.     glVertex3f(0.5, 0.5, 0.5);
  232.     glVertex3f(0.5, -0.5, 0.5);
  233.     glEnd();
  234.  
  235.     // Green side - LEFT
  236.     glBegin(GL_POLYGON);
  237.     glColor3f(0.0, 1.0, 0.0);
  238.     glVertex3f(-0.5, -0.5, 0.5);
  239.     glVertex3f(-0.5, 0.5, 0.5);
  240.     glVertex3f(-0.5, 0.5, -0.5);
  241.     glVertex3f(-0.5, -0.5, -0.5);
  242.     glEnd();
  243.  
  244.     // Blue side - TOP
  245.     glBegin(GL_POLYGON);
  246.     glColor3f(0.0, 0.0, 1.0);
  247.     glVertex3f(0.5, 0.5, 0.5);
  248.     glVertex3f(0.5, 0.5, -0.5);
  249.     glVertex3f(-0.5, 0.5, -0.5);
  250.     glVertex3f(-0.5, 0.5, 0.5);
  251.     glEnd();
  252.  
  253.     // Red side - BOTTOM
  254.     glBegin(GL_POLYGON);
  255.     glColor3f(1.0, 0.0, 0.0);
  256.     glVertex3f(0.5, -0.5, -0.5);
  257.     glVertex3f(0.5, -0.5, 0.5);
  258.     glVertex3f(-0.5, -0.5, 0.5);
  259.     glVertex3f(-0.5, -0.5, -0.5);
  260.     glEnd();
  261.  
  262.  
  263.     glutSwapBuffers();
  264.  
  265.     glutPostRedisplay();
  266.  
  267. }
  268.  
  269. void setLightning(){
  270.  
  271.     const GLfloat light0_color[4] = { .3, .3, .3, 0.0 };
  272.     GLfloat light0_shininess[] = { 40.0 };
  273.  
  274.     GLfloat light1_ambient[] = { 0.2, 0.2, 0.2, 1.0 };
  275.     GLfloat light1_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
  276.     const GLfloat light1_color[4] = { .3, .3, .3, 0.0 };
  277.     GLfloat light1_shininess[] = { 40.0 };
  278.  
  279.     glEnable(GL_LIGHT0);
  280.     glLightfv(GL_LIGHT0, GL_POSITION, light_position[0]);
  281.     glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, light0_color);
  282.     glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, light0_shininess);
  283.  
  284.     glEnable(GL_LIGHT1);
  285.     glLightfv(GL_LIGHT1, GL_POSITION, light_position[1]);
  286.     glLightfv(GL_LIGHT1, GL_AMBIENT, light1_ambient);
  287.     glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse);
  288.     glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, light1_color);
  289.     glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, light1_shininess);
  290. }
  291.  
  292. void reshape(int w, int h){
  293.  
  294.     #ifdef DEBUG
  295.         printf("[DEBUG] Reshaping window, new size: %d x %d\n", w, h);
  296.     #endif
  297.    
  298.    
  299.     glViewport(w/2, 0, w/2, h);
  300.     glMatrixMode(GL_PROJECTION);
  301.     glLoadIdentity();
  302.     glFrustum(-0.041421, 0.041421, -0.041421, 0.041421, near, 500);
  303.  
  304.     setLightning();
  305. }
  306.  
  307.  
  308. char mode = 0; // 0 = obj, 1 = light
  309. void keyboard(unsigned char key, int x, int y){
  310.  
  311.     switch (key){
  312.  
  313.     case '1':
  314.         if (mode == 0){
  315.             objects[selectedObject].translationX -= 0.1;
  316.         }
  317.         else{
  318.             light_position[light][0] += 0.05;
  319.             if (light_position[light][0] > 1) light_position[light][0] = 1;
  320.             if (light == 0){
  321.                 glLightfv(GL_LIGHT0, GL_POSITION, light_position[light]);
  322.             }
  323.             else{
  324.                 glLightfv(GL_LIGHT1, GL_POSITION, light_position[light]);
  325.             }
  326.         }
  327.         break;
  328.     case '2':
  329.         if (mode == 0){
  330.             objects[selectedObject].translationX += 0.1;
  331.         }
  332.         else{
  333.             light_position[light][0] -= 0.05;
  334.             if (light_position[light][0] < -1) light_position[light][0] = -1;
  335.             if (light == 0){
  336.                 glLightfv(GL_LIGHT0, GL_POSITION, light_position[light]);
  337.             }
  338.             else{
  339.                 glLightfv(GL_LIGHT1, GL_POSITION, light_position[light]);
  340.             }
  341.         }
  342.  
  343.         break;
  344.     case '3':
  345.         if (mode == 0){
  346.             objects[selectedObject].translationY -= 0.1;
  347.         }
  348.         else{
  349.             light_position[light][1] += 0.05;
  350.             if (light_position[light][1] > 1) light_position[light][1] = 1;
  351.             if (light == 0){
  352.                 glLightfv(GL_LIGHT0, GL_POSITION, light_position[light]);
  353.             }
  354.             else{
  355.                 glLightfv(GL_LIGHT1, GL_POSITION, light_position[light]);
  356.             }
  357.         }
  358.  
  359.         break;
  360.     case '4':
  361.         if (mode == 0){
  362.             objects[selectedObject].translationY += 0.1;
  363.         }
  364.         else{
  365.             light_position[light][1] -= 0.05;
  366.             if (light_position[light][1] < -1) light_position[light][1] = -1;
  367.             if (light == 0){
  368.                 glLightfv(GL_LIGHT0, GL_POSITION, light_position[light]);
  369.             }
  370.             else{
  371.                 glLightfv(GL_LIGHT1, GL_POSITION, light_position[light]);
  372.             }
  373.         }
  374.         break;
  375.     case '5':
  376.         if (mode == 0){
  377.             objects[selectedObject].translationZ -= 0.1;
  378.         }
  379.         else{
  380.             light_position[light][2] += 0.05;
  381.             if (light_position[light][2] > 1) light_position[light][2] = 1;
  382.             if (light == 0){
  383.                 glLightfv(GL_LIGHT0, GL_POSITION, light_position[light]);
  384.             }
  385.             else{
  386.                 glLightfv(GL_LIGHT1, GL_POSITION, light_position[light]);
  387.             }
  388.         }
  389.  
  390.         break;
  391.     case '6':
  392.         if (mode == 0){
  393.             objects[selectedObject].translationY += 0.1;
  394.         }
  395.         else{
  396.             light_position[light][2] -= 0.05;
  397.             if (light_position[light][2] < -1) light_position[light][2] = -1;
  398.             if (light == 0){
  399.                 glLightfv(GL_LIGHT0, GL_POSITION, light_position[light]);
  400.             }
  401.             else{
  402.                 glLightfv(GL_LIGHT1, GL_POSITION, light_position[light]);
  403.             }
  404.         }
  405.  
  406.         break;
  407.     case '7':
  408.         objects[selectedObject].rotationX += 0.1;
  409.         break;
  410.     case '8':
  411.         objects[selectedObject].rotationY += 0.1;
  412.         break;
  413.     case '9':
  414.         objects[selectedObject].rotationZ += 0.1;
  415.         break;
  416.     case 'w':
  417.     case 'W':
  418.         camera.slide(0, 0, -1);
  419.         break;
  420.     case 's':
  421.     case 'S':
  422.         camera.slide(0, 0, 1);
  423.         break;
  424.     case 'd':
  425.     case 'D':
  426.         camera.slide(1, 0, 0);
  427.         break;
  428.     case 'a':
  429.     case 'A':
  430.         camera.slide(-1, 0, 0);
  431.         break;
  432.     case '-':
  433.     case '_':
  434.         objects[selectedObject].scale -= 0.1;
  435.         break;
  436.     case '=':
  437.     case '+':
  438.         objects[selectedObject].scale += 0.1;
  439.         break;
  440.     case 'n':
  441.     case 'N':
  442.         light = (light + 1) % 2;
  443.         break;
  444.     case 'C':
  445.     case 'c':
  446.         colorPicker = !colorPicker;
  447.         break;
  448.     case 'M':
  449.     case 'm':
  450.         if (enable){
  451.             enable = false;
  452.             glDisable(GL_LIGHTING);
  453.         }
  454.         else{
  455.             enable = true;
  456.             glEnable(GL_LIGHTING);
  457.         }
  458.         break;
  459.     case '.':
  460.     case '>':
  461.         selectedObject = (selectedObject + 1) % objects.size();
  462.         break;
  463.     case ',':
  464.     case '<':
  465.         selectedObject -= 1;
  466.         if (selectedObject == -1) selectedObject = objects.size() - 1;
  467.         break;
  468.     case 'b':
  469.     case 'B':
  470.         mode = (mode + 1) % 2;
  471.         break;
  472.     case 'z':
  473.     case 'Z':
  474.         camera.slide(0, 0, -0.2);
  475.         //camera->z += cameraForward.z / 3;
  476.         //camera->x += cameraForward.x / 3;
  477.         //camera->y += cameraForward.y / 3;
  478.  
  479.         //lookAt->z += cameraForward.z / 3;
  480.         //lookAt->x += cameraForward.x / 3;
  481.         //lookAt->y += cameraForward.y / 3;
  482.  
  483.         near -= 0.0026;
  484.  
  485.         glMatrixMode(GL_PROJECTION);
  486.         glLoadIdentity();
  487.         glFrustum(-0.041421, 0.041421, -0.041421, 0.041421, near, 500);
  488.         break;
  489.     case 'x':
  490.     case 'X':
  491.         camera.slide(0, 0, 0.2);
  492.         //camera->z -= cameraForward.z / 3;
  493.         //camera->x -= cameraForward.x / 3;
  494.         //camera->y -= cameraForward.y / 3;
  495.  
  496.         //lookAt->z -= cameraForward.z / 3;
  497.         //lookAt->x -= cameraForward.x / 3;
  498.         //lookAt->y -= cameraForward.y / 3;
  499.  
  500.         near += 0.0026;
  501.  
  502.         glMatrixMode(GL_PROJECTION);
  503.         glLoadIdentity();
  504.         glFrustum(-0.041421, 0.041421, -0.041421, 0.041421, near, 500);
  505.         break;
  506.         break;
  507.  
  508.     }
  509.  
  510. }
  511.  
  512. void mainMenu(int item){
  513.  
  514.     std::vector<Point*> vertex;
  515.     std::vector<Face*> faces;
  516.     std::vector<Vector*> normals;
  517.     string s = "";
  518.     if (item == 0){
  519.         //Loader("Obj\\cubo1.obj", vertex, normals, faces);
  520.  
  521.     }
  522.     else if (item == 1){
  523.         s = "Obj\\pumpkin.obj";
  524.     }
  525.  
  526.     else if (item == 2){
  527.         s = "Obj\\apple.obj";
  528.     }
  529.     else if (item == 3){
  530.         s = "Obj\\chimp.obj";
  531.     }
  532.     else if (item == 4){
  533.         s = "Obj\\cow.obj";
  534.     }
  535.     else if (item == 5){
  536.         s = "Obj\\dog.obj";
  537.  
  538.     }
  539.     else if (item == 6){
  540.         s = "Obj\\eagle.obj";
  541.     }
  542.     else if (item == 7){
  543.         s = "Obj\\elephant.obj";
  544.     }
  545.     else if (item == 8){
  546.         s = "Obj\\lion.obj";
  547.     }
  548.     if (s.empty()) return;
  549.     vector<Point> CONST_P;
  550.     vector<Vector> CONST_vec;
  551.     vector<Face> CONST_f;
  552.     MEM_VEC_POINTS.push_back(CONST_P);
  553.     MEM_VEC_VECTOR.push_back(CONST_vec);
  554.     MEM_VEC_FACES.push_back(CONST_f);
  555.  
  556.     //Loader l = Loader(&s, &CONST_P, &CONST_vec, &CONST_f);
  557.     Loader l = Loader(&s, &MEM_VEC_POINTS[MEM_VEC_POINTS.size() - 1], &MEM_VEC_VECTOR[MEM_VEC_VECTOR.size() - 1], &MEM_VEC_FACES[MEM_VEC_FACES.size() - 1]);
  558.     l.load();
  559.     for (int i = 0; i < MEM_VEC_POINTS[MEM_VEC_POINTS.size() - 1].size(); i++){
  560.         vertex.push_back(&MEM_VEC_POINTS[MEM_VEC_POINTS.size() - 1][i]);
  561.     }
  562.  
  563.     for (int i = 0; i <MEM_VEC_VECTOR[MEM_VEC_VECTOR.size() - 1].size(); i++){
  564.         normals.push_back(&MEM_VEC_VECTOR[MEM_VEC_VECTOR.size() - 1][i]);
  565.     }
  566.  
  567.     for (int i = 0; i < MEM_VEC_FACES[MEM_VEC_FACES.size() - 1].size(); i++){
  568.         faces.push_back(&MEM_VEC_FACES[MEM_VEC_FACES.size() - 1][i]);
  569.     }
  570.  
  571.  
  572.  
  573.  
  574.     printf("Criando o novo objeto . . ./n");
  575.     Object newObject = Object(vertex, faces, normals);
  576.     newObject.calculateNormals();
  577.     newObject.calculateVertexNormals();
  578.     printf("Calculando as normais . . ./n");
  579.     objects.push_back(newObject);
  580.     printf("Inserindo o objeto . . ./n");
  581.     printf(" READY! \n");
  582. }
  583.  
  584. void mousePress(int btn, int state, int x, int y){
  585.     if (btn == GLUT_LEFT_BUTTON){
  586.  
  587.         if (state == GLUT_UP){
  588.             drag = false;
  589.             picking = false;
  590.         }
  591.         else{
  592.             drag = false;
  593.             if (colorPicker && x > glutGet(GLUT_WINDOW_WIDTH) - 120 && y > glutGet(GLUT_WINDOW_HEIGHT) - 120){ // picking a color
  594.                 picking = true;
  595.  
  596.                 GLint viewport[4];
  597.                 GLubyte pixel[3];
  598.  
  599.                 glGetIntegerv(GL_VIEWPORT, viewport);
  600.  
  601.                 glReadPixels(x, viewport[3] - y, 1, 1,
  602.                     GL_RGB, GL_UNSIGNED_BYTE, (void *)pixel);
  603.  
  604.                 printf(">>>>>%d %d %d\n", pixel[0], pixel[1], pixel[2]);
  605.             }
  606.             else{
  607.                
  608.                 mouseInitialPosition->x = x;
  609.                 mouseInitialPosition->y = y;
  610.             }
  611.         }
  612.     }
  613. }
  614.  
  615. void mouseMove(int x, int y){
  616.     if (!picking){
  617.         camera.yawAngle += (x - mouseInitialPosition->x)*0.5;
  618.         camera.pitchAngle += (y - mouseInitialPosition->y)*0.5;
  619.         mouseInitialPosition->x = x;
  620.         mouseInitialPosition->y = y;
  621.     }
  622. }
  623.  
  624. int main(int argc, char** argv)
  625. {
  626.     glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
  627.  
  628.     mainMenu(1);
  629.     mainMenu(4);
  630.  
  631.     glutCreateWindow("Hello World");
  632.     glutFullScreen();
  633.  
  634.     glutDisplayFunc(display);
  635.  
  636.     glutReshapeFunc(reshape);
  637.  
  638.     glutKeyboardFunc(keyboard);
  639.  
  640.     glutMouseFunc(mousePress);
  641.  
  642.     glutMotionFunc(mouseMove);
  643.  
  644.     mousePosition = new Point(0, 0, 0);
  645.     mouseInitialPosition = new Point(0, 0, 0);
  646.  
  647.     camera = Camera(0, 0, 100);
  648.  
  649.     glutMainLoop();
  650.     return 0;
  651.  
  652.  
  653. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement